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



当使用PackageManager从设备获取应用程序列表时,如果我调用pm.getApplicationIcon(app);,而应用程序没有图标,系统将返回系统默认值,就像它应该做的那样,但我在控制台中得到了以下错误输出:

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);
}
}

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

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

最新更新