【问题标题】:Android PackageManager No package identifier when getting value for resource number 0x00000000Android PackageManager获取资源号0x00000000的值时没有包标识符
【发布时间】:2019-04-29 11:52:30
【问题描述】:

当使用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);
    }
}

【问题讨论】:

  • IIRC,每个 ApplicationInfo 都应该有一个 icon 字段,它是资源 ID。在调用getApplicationIcon()之前检查它是否非零。
  • @MikeM。那么有没有办法在不使用这种方法的情况下仍然获得“默认的android应用程序图标”?因为我还是喜欢那样。
  • 嗯,即兴发挥,如果为零,请改为加载 android.R.drawable.sym_def_app_icon。很确定这是正确的 ID。
  • @MikeM。似乎工作!如果您想将其作为答案提交,我会接受。
  • 酷。仅供参考,我已经仔细检查了源代码以确保它是正确的,而不仅仅是“偶然”工作。很高兴它有帮助。干杯!

标签: android android-applicationinfo


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多