【问题标题】:How to initialise Context in order to get the names of installed applications?如何初始化 Context 以获取已安装应用程序的名称?
【发布时间】:2018-06-14 10:51:50
【问题描述】:

我正在尝试制作一个程序来获取所有已安装应用程序的名称。在我的 Activity 中,我有一个名为 getApplicationNames 的方法应该返回此信息:

private ArrayList<String> getApplicationNames(Context context){
    ArrayList<String> nameOfRunningApps = new ArrayList<>();
    List<ApplicationInfo> runningApplications = context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);

    for(ApplicationInfo applicationInfo: runningApplications){
        nameOfRunningApps.add(applicationInfo.name);
    }

    return nameOfRunningApps;
}

现在我想在onCreate()中调用这个方法:

ArrayList<String> installedProgramNames = getApplicationNames(??);

如何创建Context 的实例以调用此方法?这甚至可能吗?

【问题讨论】:

  • ArrayList&lt;String&gt; installedProgramNames = getApplicationNames(this); 如果你在Activity类的onCreate()中调用方法
  • 谢谢!成功了!

标签: android android-context


【解决方案1】:

由于Activity基本上是在层次结构中扩展Context,您可以在onCreate()中轻松实现您的要求:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    ArrayList<String> installedProgramNames = getApplicationNames(this);
    ...
}

【讨论】:

    【解决方案2】:

    在 Android 中,Activity 类扩展了Context(参见documentation page 顶部的层次结构图),因此您可以通过this 关键字将您的活动的自引用传递给getApplicationNames ,即

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ArrayList<String> installedProgramNames = getApplicationNames(this);
    }
    

    这也适用于Activity 的其他变体,例如支持库中的AppCompatActivity

    【讨论】:

      【解决方案3】:

      使用应用程序上下文将完成这项工作。

      ArrayList<String> installedProgramNames = getApplicationNames(getApplicationContext());
      

      【讨论】:

        猜你喜欢
        • 2011-10-13
        • 2014-02-24
        • 2011-10-06
        • 1970-01-01
        • 2014-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多