Android PackageManager获取资源号0x00000000的值时没有包标识符

时间:2018-11-27 17:10:03

标签: android android-applicationinfo

使用PackageManager从设备获取应用程序列表时,如果我呼叫pm.getApplicationIcon(app);并且应用程序没有没有图标,系统将返回系统默认的 as it's supposed to do ,但我在控制台中收到此错误输出:

W/ResourceType: No package identifier when getting value for resource number 0x00000000
W/PackageManager: Failure retrieving resources for com.google.android.gsf.login: Resource ID #0x0

由于我正在电话中遍历所有应用程序,因此这变成了一些非常糟糕的垃圾邮件,我希望尽可能避免这些垃圾邮件。

我的代码

PackageManager pm = getActivity().getApplicationContext().getPackageManager();

for (ApplicationInfo app : pm.getInstalledApplications(0)) {
    long dataUsed = ((TrafficStats.getUidRxBytes(app.uid) + TrafficStats.getUidTxBytes(app.uid)) / 1000) / 1000;

    if ((int)dataUsed > 0) {
        String name = pm.getApplicationLabel(app).toString();
        Drawable icon = pm.getApplicationIcon(app);

        // Custom object
        DataUsageItem item = new DataUsageItem(name, icon, false, dataUsed, new int[]{ 0 , 0 , 0 , 0 , 0 , 0 , 0 });
        items.add(item);
    }
}

1 个答案:

答案 0 :(得分:2)

每个ApplicationInfo都有一个icon字段,其中包含给定包中该可绘制对象的资源ID。调用getApplicationIcon()之前,请检查它是否为非零。

对于那些没有图标的软件包,即icon字段为零的软件包,您可以使用android.R.drawable.sym_def_app_icon ID检索系统默认图标。