2014-02-09 130 views
2

我試圖在android中檢索安裝的應用程序的列表。我寫了下面的代碼:無法對非靜態方法進行靜態引用getPackageManager()

final Intent myIntent = new Intent(Intent.ACTION_MAIN, null); 
myIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
final List AppsList = Context.getPackageManager().queryIntentActivities(myIntent, 0); 

我收到此錯誤:

Cannot make a static reference to the non-static method getPackageManager() from the type Context 

知道,無論ContextPackageManager是抽象類,不能糾正錯誤。請幫助。

回答

2

嘗試:

final List AppsList = getApplicationContext().getPackageManager().queryIntentActivities(myIntent, 0); 
1

Knowing that both Context and PackageManager are abstract classes

使用的Context具體子類的實例,如Activity

因爲你的代碼很可能已經在上Context子類中的方法,改變問題的行:

final List AppsList = getPackageManager().queryIntentActivities(myIntent, 0); 

如果由於某種原因,上面顯示你的代碼是不是在子類中的方法Context,您需要將一些Context實例傳遞到此代碼所在的任何位置,並在其上調用getPackageManager()

2

您需要使用上下文的實例來調用此方法。 通常,當您處於活動或服務中時,上下文爲thisgetContext()。您應該使用這種技術來:

  • 開放新sceens
  • 訪問ressources的活動中。
  • 一切。如果你想要一個更加全球化的背景下,是「本地」的當前活動

,您可以使用getApplicationContext(),如果你想例如,訪問的嵌入式數據庫,這是很有用。

相關問題