小米部分手机在相册或相机拍照裁剪图片时,出现错误问题 Unable to load resource 0x00000000 from pkg=com.android.systemui
报错型号:Mi Note3 7.1.2(不过7.1.1没问题)、Max2 7.1.1
打印日志信息:
03-27 15:28:06.602 1789-1789/? E/Icon: Unable to load resource 0x00000000 from pkg=com.android.systemuiandroid.content.res.Resources$NotFoundException: Resource ID #0x0at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:201)at android.content.res.MiuiResourcesImpl.getValue(MiuiResourcesImpl.java:94)at android.content.res.Resources.getDrawable(Resources.java:788)at android.graphics.drawable.Icon.loadDrawableInner(Icon.java:316)at android.graphics.drawable.Icon.loadDrawable(Icon.java:272)at android.graphics.drawable.Icon.loadDrawableAsUser(Icon.java:380)at com.android.systemui.statusbar.ExpandedIcon.getDrawable(ExpandedIcon.java:59)at com.android.systemui.statusbar.StatusBarIconView.getIcon(StatusBarIconView.java:188)at com.android.systemui.statusbar.StatusBarIconView.setIcon(StatusBarIconView.java:141)at com.android.systemui.statusbar.StatusBarIconView.updateDarkMode(StatusBarIconView.java:280)at com.android.systemui.statusbar.phone.SimpleStatusBar.updateDarkMode(SimpleStatusBar.java:293)at com.android.systemui.statusbar.phone.PhoneStatusBar$23.run(PhoneStatusBar.java:4124)at android.os.Handler.handleCallback(Handler.java:754)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:163)at android.app.ActivityThread.main(ActivityThread.java:6372)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:791)
原因:小米miui系统默认的裁剪图片可能裁剪得过大,或对return-data分配的资源不足,造成return-data失败。
解决思路:裁剪后,intent保存图片的资源路径Uri,在onActivityResult()方法中,再提取对应的Uri图片资源转换为Bitmap使用。
在裁剪的方法中
去掉:
intent.putExtra("return-data", true);//将图片以data形式传入intent,图片过大时就会有问题
改成:
uriCutImg = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");intent.putExtra(MediaStore.EXTRA_OUTPUT, uriCutImg); //将裁剪好图片,存进该URI中
在onActivityResult方法中
Bitmap bmap = null;try {bmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uriCutImg));//通过URI获得的图片} catch (FileNotFoundException e) {e.printStackTrace();}
参考原文地址:/eclothy/article/details/42719217
还发现比较有趣的地方,当时还以为是后台返回提示信息有问题:
小米最新版本的MIUI V9.5.4.0稳定版,用到Toast时,系统会自动加上应用名和冒号
如:微信保存图片成功时提示,微信:+保存路径
所以,使用Intent传递参数时,不管是图片还是其他类型文件,直接把大的数据作为了参数进行传递都要,注意,注意,注意