在我调用getApplicationIcon()
之后:
context.getPackageManager().getApplicationIcon("com.cmcm.gamemaster");
它返回:
放在中间的白色条形图像。并且总是针对特定应用程序发生,安装的应用程序列表中的其他人永远不会返回错误的图标
在调用该方法之前,我调用getPackageInfo()大约30次来构建一个已安装的应用程序列表。所以我评论了那些代码然后问题就消失了。
我在框架的源代码(android 6.0.1)中注意,但没有找到任何有用的信息。
有些人之前遇到过这个问题,或者在框架的源代码中告诉我错误的图标的可绘制文件名,这样我就可以检查发生了什么。
预先感谢。
根据您的描述,我假设您要获取已安装的应用程序列表。试试这个来获取所有应用程序:
import android.content.pm.ApplicationInfo;
...
List<ApplicationInfo> apps = context.getPackageManager().getInstalledApplications(0);
...
如果您想要代码中的特定代码,请尝试以下方法:
import android.content.pm.ApplicationInfo;
...
ApplicationInfo app = context.getPackageManager().getApplicationInfo("com.cmcm.gamemaster", 0);
Icon icon = app.loadIcon(getPackageManager());
...
您可以从apps/app
获取图标或标题,因为它包含与应用程序相关的所有信息。请记住使用确切的import语句。
如果上述方法不起作用,请参阅this post。我相信这将是有用的。
首先获取PackageManager实例,
然后在getApplicationIcon(String)中传递packageName,它将返回Bitmap!
PackageManager packageManager = mContext.getPackageManager();
Bitmap mBitmap = packageManager.getApplicationIcon(app.package.name);
holder.appIcon.setImageDrawable(mBitmap);
getPackageManager()。getApplicationIcon(“APP_PACKAGE_NAME”)返回Drawable。获得drawable后,您可以使用imageView.setImageDrawable(drawable)在imageView中显示图标。
提示: - 获取所有已安装的应用程序图标可能会挂起您的UI,因此您必须在单独的线程中执行此操作。
new Thread(new Runnable() {
@Override
public void run() {
try {
final Drawable drawable = mContext.getPackageManager().getApplicationIcon(applicationInfo.packageName);
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
holder.imageView.setImageDrawable(drawable);
}
});
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}).start();
希望能帮助到你。