对我来说,简单的重启设备就解决了问题。
在更新到Android 12后,我没有重新启动我的测试手机。我遇到了一个奇怪的bug,即我的应用程序发出的Toast中显示了通用的应用图标。我尝试按照Mickaël的回答更改Manifest文件,但没有成功。最终,我恢复了应用程序调试之前使用的完全相同的Manifest文件......然后我重新启动了设备。现在我的应用可靠地在Toast中显示正确的图标。发生了什么?不确定。我怀疑重启可能会触发一个图标缓存刷新,遍历所有已安装的应用程序以搜索新的/更新的应用程序图标。
看起来这个问题已经被报告给了 Google,并且指派给了一名 Google 工程师: https://issuetracker.google.com/issues/202863198
<application android:icon="@drawable/ic_stat_name" ...
会覆盖默认的toast图标。public void CustomToast(Context context,String text,int ico,int duration)
{
//define new Toast Object
Toast toast = new Toast(context.getApplicationContext());
//create TextView Object to set icon for it
TextView tv_toast=new TextView(context);
//get text from parameter for toast
tv_toast.setText(text);
//set background color and radius for my toast
GradientDrawable gd = new GradientDrawable();
gd.setColor(Color.GRAY);
gd.setCornerRadius(20);
gd.setStroke(1, 0xFF000000);
//applying setting to tv
tv_toast.setBackground(gd);
//set icon
tv_toast.setCompoundDrawablesWithIntrinsicBounds(ico, 0, 0, 0);
//set duration
toast.setDuration(duration);
//ending- set my custom style for toast object
toast.setView(tv_toast);
// then show it
toast.show();
}
2023-10-23 16:12:26.166 3055-3055 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.167 3055-3055 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.168 3055-3055 ResourcesManager com.android.systemui E failed to add asset path '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk'
java.io.IOException: Failed to load asset path /data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk
at android.content.res.ApkAssets.nativeLoad(Native Method)
at android.content.res.ApkAssets.<init>(ApkAssets.java:295)
at android.content.res.ApkAssets.loadFromPath(ApkAssets.java:144)
at android.app.ResourcesManager.loadApkAssets(ResourcesManager.java:472)
at android.app.ResourcesManager.access$000(ResourcesManager.java:84)
at android.app.ResourcesManager$ApkAssetsSupplier.load(ResourcesManager.java:186)
at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:559)
at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:641)
at android.app.ResourcesManager.findOrCreateResourcesImplForKeyLocked(ResourcesManager.java:696)
at android.app.ResourcesManager.createResources(ResourcesManager.java:1049)
at android.app.ResourcesManager.getResources(ResourcesManager.java:1152)
at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2453)
at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1798)
at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1784)
at android.app.ApplicationPackageManager.getDrawable(ApplicationPackageManager.java:1545)
at miui.content.res.IconCustomizer.getCustomizedNormalIcon(IconCustomizer.java:804)
at miui.content.res.IconCustomizer.getIcon(IconCustomizer.java:780)
at android.app.MiuiThemeHelper.getDrawable(MiuiThemeHelper.java:101)
at android.content.res.IMiuiThemeHelperImpl.getDrawable(IMiuiThemeHelperImpl.java:39)
at android.content.res.ThemeManagerStub.getDrawable(ThemeManagerStub.java:159)
at android.app.ApplicationPackageManager.loadUnbadgedItemIcon(ApplicationPackageManager.java:3073)
at android.content.pm.PackageItemInfo.loadUnbadgedIcon(PackageItemInfo.java:290)
at com.android.systemui.toast.SystemUIToast.getBadgedIcon(SystemUIToast.java:286)
at com.android.systemui.toast.SystemUIToast.inflateToastView(SystemUIToast.java:198)
at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:90)
at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:77)
at com.android.systemui.toast.ToastFactory.createToast(ToastFactory.java:78)
at com.android.systemui.toast.ToastUI.lambda$showToast$0(ToastUI.java:131)
at com.android.systemui.toast.ToastUI.$r8$lambda$w_gPCh3F8Xxn1jN4lkQZoUci71c(Unknown Source:0)
at com.android.systemui.toast.ToastUI$$ExternalSyntheticLambda0.run(Unknown Source:16)
at com.android.systemui.toast.ToastUI.showToast(ToastUI.java:169)
at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:1494)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
2023-10-23 16:12:26.168 3055-3055 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.169 3055-3055 ndroid.systemu com.android.systemui E Failed to open APK '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk': I/O error
2023-10-23 16:12:26.170 3055-3055 ResourcesManager com.android.systemui E failed to add asset path '/data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk'
java.io.IOException: Failed to load asset path /data/app/~~ydafWiMxymoRue6E25Ic_Q==/my.app.id-o52oNN4A3UebVQPR4X_ZMQ==/base.apk
at android.content.res.ApkAssets.nativeLoad(Native Method)
at android.content.res.ApkAssets.<init>(ApkAssets.java:295)
at android.content.res.ApkAssets.loadFromPath(ApkAssets.java:144)
at android.app.ResourcesManager.loadApkAssets(ResourcesManager.java:472)
at android.app.ResourcesManager.access$000(ResourcesManager.java:84)
at android.app.ResourcesManager$ApkAssetsSupplier.load(ResourcesManager.java:186)
at android.app.ResourcesManager.createAssetManager(ResourcesManager.java:559)
at android.app.ResourcesManager.createResourcesImpl(ResourcesManager.java:641)
at android.app.ResourcesManager.findOrCreateResourcesImplForKeyLocked(ResourcesManager.java:696)
at android.app.ResourcesManager.createResources(ResourcesManager.java:1049)
at android.app.ResourcesManager.getResources(ResourcesManager.java:1152)
at android.app.ActivityThread.getTopLevelResources(ActivityThread.java:2453)
at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1798)
at android.app.ApplicationPackageManager.getResourcesForApplication(ApplicationPackageManager.java:1784)
at android.app.ApplicationPackageManager.getDrawable(ApplicationPackageManager.java:1545)
at android.app.ApplicationPackageManager.loadUnbadgedItemIcon(ApplicationPackageManager.java:3088)
at android.content.pm.PackageItemInfo.loadUnbadgedIcon(PackageItemInfo.java:290)
at com.android.systemui.toast.SystemUIToast.getBadgedIcon(SystemUIToast.java:286)
at com.android.systemui.toast.SystemUIToast.inflateToastView(SystemUIToast.java:198)
at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:90)
at com.android.systemui.toast.SystemUIToast.<init>(SystemUIToast.java:77)
at com.android.systemui.toast.ToastFactory.createToast(ToastFactory.java:78)
at com.android.systemui.toast.ToastUI.lambda$showToast$0(ToastUI.java:131)
at com.android.systemui.toast.ToastUI.$r8$lambda$w_gPCh3F8Xxn1jN4lkQZoUci71c(Unknown Source:0)
at com.android.systemui.toast.ToastUI$$ExternalSyntheticLambda0.run(Unknown Source:16)
at com.android.systemui.toast.ToastUI.showToast(ToastUI.java:169)
at com.android.systemui.statusbar.CommandQueue$H.handleMessage(CommandQueue.java:1494)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
原始答案
这个组合对我有效:
1. 在清单文件中添加android:roundIcon
。
<application
...
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round">
图像资源 -> 启动器图标(自适应和传统) -> 选项 -> 圆形图标(API = 25) -> 生成:是
另外,如果重要的话,我的图标资源是PNG格式。
android:icon="@drawable/ic_launcher"
中引用了烤面包图标吗?ic_launcher 文件是 mipmap-XXXX 中的 png 文件。它们使用哪个 dpi 文件夹?或者它们使用 mipmap-anydpi-v26/ic_launcher.xml 文件? - Saftpresse99