无法对非静态方法进行静态引用getPackageManager()

时间:2014-02-09 18:50:21

标签: android android-context android-package-managers

我正在尝试检索android中安装的应用程序列表。我写了以下代码:

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都是抽象类,无法解决错误。请帮助。

3 个答案:

答案 0 :(得分:2)

尝试:

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

答案 1 :(得分:2)

您需要使用上下文实例来调用此方法。 通常,当您在活动或服务中时,上下文为thisgetContext()。您应该使用此技术:

  • 打开新的场景
  • 访问活动中的资源。
  • 当前活动“本地”的所有其他内容

如果您想要更全局的上下文,可以使用getApplicationContext(),如果您想要访问嵌入式数据库,这非常有用。

答案 2 :(得分:1)

  

知道Context和PackageManager都是抽象类

使用Context的具体子类的实例,例如Activity

由于您的代码可能已经在Context的子类中的方法中,因此将有问题的行更改为:

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

如果出于某种原因,上面显示的代码不在Context的子类的方法中,则需要将一些Context实例传递到此代码所在的位置,并调用{ {1}}就可以了。