在安卓系统中如何获取已安装应用程序的名称?

11

我写了一个小方法来显示Android设备上已安装的应用程序名称。但是当我使用"name"属性时,它会显示异常错误。而当我使用"packageName"时,该方法可以完美执行并在列表中显示包名。

private void getInstalledApps() {
    // TODO Auto-generated method stub
     PackageManager packageManager=this.getPackageManager();
        List<ApplicationInfo applist=packageManager.getInstalledApplications(0);


        Iterator<ApplicationInfo> it=applist.iterator();
        while(it.hasNext()){
            ApplicationInfo pk=(ApplicationInfo)it.next();

            String appname=pk.name.toString();

            installedapplist.add(appname);
        }

}
在上面的代码中,当我使用String appname=pk.packageName.toString()时它可以正常工作,但是当我使用String appname=pk.name.toString()时程序会抛出异常错误。请帮我解决这个问题。
2个回答

27

我猜你的代码抛出了空指针异常,因为name字段为空。无论如何,你可能想要的是:

String appname = packageManager.getApplicationLabel(pk).toString()

谢谢。正是我想要的。 - user3734429
@charlag_khan - 你的意思是 pk.name 吗? 可能是因为清单文件没有声明 android:name 属性。当应用程序需要定义自己的 Application 子类时,才会使用该名称。 - Ted Hopp

0

通过使用此功能,您可以获取已安装应用程序的包名称和应用程序名称。

List<PackageInfo> packageInfos=getPackageManager().getInstalledPackages(0);
for (PackageInfo packageInfo:packageInfos)
{
        Log.d(TAG,"packageName "+packageInfo.packageName);
        Log.d(TAG,"appname "+getPackageManager().getApplicationLabel(packageInfo.applicationInfo));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接