2014-02-09 132 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(),如果你想例如,访问的嵌入式数据库,这是很有用。

相关问题