Matisse icon indicating copy to clipboard operation
Matisse copied to clipboard

【反馈bug】Android 10、华为Honor Magic 2 TNY-AL00 预览图片时 Matisse无响应

Open meikaiss opened this issue 5 years ago • 42 comments

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2 型号: TNY-AL00 Android 版本:10 Magic UI版本:3.0.0

编译配置: compileSdkVersion 29 targetSdkVersion 29 multiDexEnabled true

在matisse 的 demo 操作步骤: 1、 点击 Dracula 2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图 3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

meikaiss avatar Dec 16 '19 07:12 meikaiss

同遇到,怎么解决的。

yoyiyi avatar Dec 16 '19 08:12 yoyiyi

快速滑动的时候,图片未加载出来的时候,点击预览,黑屏ANR,机型华为Mate30

lvzesong avatar Dec 16 '19 08:12 lvzesong

分析anr,是PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88) 这一行卡住了。

yoyiyi avatar Dec 16 '19 08:12 yoyiyi

options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPreferQualityOverSpeed = false; 暂时把图片质量调低,就不会出现ANR。

yoyiyi avatar Dec 16 '19 09:12 yoyiyi

options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPreferQualityOverSpeed = false; 暂时把图片质量调低,就不会出现ANR。 还是一样呀,他是直接进去从低质量的滑动到高质量的都没问题,直接点进去看那张高质量直接ANR了

NaoiAyato avatar Dec 19 '19 13:12 NaoiAyato

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

NaoiAyato avatar Dec 19 '19 13:12 NaoiAyato

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

williamleung avatar Dec 20 '19 08:12 williamleung

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

NaoiAyato avatar Dec 20 '19 08:12 NaoiAyato

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

按你说的方法改了还是没用,不过找到了另外一种解决方法 修改 GlideEngine.java 中 `@Override public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {

    Glide.with(context).load(uri)
            .apply(new RequestOptions()
                    .skipMemoryCache(true)
                    .override(resizeX, resizeY).priority(Priority.HIGH)
                    .fitCenter())
            .into(imageView);
}`

新加了 skipMemoryCache(true) 可以生效

williamleung avatar Dec 20 '19 13:12 williamleung

怎么还用 获取真实路径的方式,Android 11 就彻底不能获取外部文件的正式路径了。早改早好。

lovelyelfpop avatar Dec 21 '19 14:12 lovelyelfpop

解决了,把URI转路径,用decodeFile。不过感觉好尴尬

能说得再具体一点吗?

就是你到5楼说的PhotoMetadataUtils---getBitmapBound函数中,传参uri,你把原有的decodeSteam改掉,不要让它走这一种方式,将Uri根据getScheme转成真实的文件路径(这个你网上搜一下很多),然后替换成BitmapFactory.decodeFile(realFilePath, options)就可以了

按你说的方法改了还是没用,不过找到了另外一种解决方法 修改 GlideEngine.java 中 `@Override public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {

    Glide.with(context).load(uri)
            .apply(new RequestOptions()
                    .skipMemoryCache(true)
                    .override(resizeX, resizeY).priority(Priority.HIGH)
                    .fitCenter())
            .into(imageView);
}`

新加了 skipMemoryCache(true) 可以生效

加了这个点击列表item的时候会整个列表闪一下

Xabws avatar Dec 23 '19 01:12 Xabws

没有人来解决一下吗?

lvzesong avatar Dec 31 '19 09:12 lvzesong

临时性的解决方案: 降级到 android 9.0。 即: compileSdkVersion 28 targetSdkVersion 28

meikaiss avatar Jan 03 '20 11:01 meikaiss

@minibugdev 我就是在都设置为 28 的情况下遇到这个问题的

gyqsophila avatar Jan 06 '20 03:01 gyqsophila

华为P30 Pro 安卓10 0.5.2-beta4(项目不是AndroidX的,不能升级最新的0.5.3版本很难受) compileSdkVersion 28 targetSdkVersion 28

我华为p30 pro也是这问题,我手机升级10之前还是正常的 升级10之后就出问题了?是华为系统的bug吗?打开图库的时候,个别图片加载出来,个别加载不出来,但是不管选择加载出来的或没加载出来的,去获取图片路径返回来在Glide都显示不出来。查看大图也是黑屏,你要按时在加载过程中快速滑动的话是必出现这种现象,就是不滑动也时不时会出现这种情况@minibugdev

qianshengta avatar Jan 06 '20 05:01 qianshengta

华为P30 Pro 安卓10 0.5.2-beta4(项目不是AndroidX的,不能升级最新的0.5.3版本很难受) compileSdkVersion 28 targetSdkVersion 28

我华为p30 pro也是这问题,我手机升级10之前还是正常的 升级10之后就出问题了?是华为系统的bug吗?打开图库的时候,个别图片加载出来,个别加载不出来,但是不管选择加载出来的或没加载出来的,去获取图片路径返回来在Glide都显示不出来。查看大图也是黑屏,你要按时在加载过程中快速滑动的话是必出现这种现象,就是不滑动也时不时会出现这种情况@minibugdev

就按上面有人回复的,把路径从URi换成真实文件路径就行了,在它的MediaGrid的setImage()方法中 SelectionSpec.getInstance().imageEngine.loadThumbnail()改为直接用GLide加载,我是华为mate20 安卓10的系统(之前也是只有前9张图片显示,后面都是灰色的空白图)

Xabws avatar Jan 06 '20 05:01 Xabws

Android10系统 + targetAPI 29 + 新安装的app(即app不能是手机android9时安装然后升级到android10),就会启用 scoped storage,是得不到外部文件的真实路径的。

lovelyelfpop avatar Jan 07 '20 03:01 lovelyelfpop

知乎APP同样有这个问题,预览会黑屏卡死

dingzhixiang avatar Jan 08 '20 02:01 dingzhixiang

这周日华为 Android 10 手机有一个系统更新,安装更新之后这个问题不再出现,我这边用两台手机验证确认华为在最新系统更新中修复了这个问题。

修复后的系统版本如下: image

后台看到的 ANR 也全部都是华为 Android 10 的设备: image

gyqsophila avatar Jan 19 '20 02:01 gyqsophila

分析anr,是PhotoMetadataUtils.getBitmapBound(PhotoMetadataUtils.java:88) 这一行卡住了。

我也是这个问题

sing1ee avatar Feb 04 '20 00:02 sing1ee

【反馈 bug】 请各位造轮子的大大,有空帮忙解决一哈。 感谢了~

设备名称:Honor Magic 2 型号: TNY-AL00 Android 版本:10 Magic UI版本:3.0.0

编译配置: compileSdkVersion 29 targetSdkVersion 29 multiDexEnabled true

在matisse 的 demo 操作步骤: 1、 点击 Dracula 2、在图片选择界面,不点击checkBox,而是点击 图片内容本身来查看大图 3、查看大图页面黑屏,10秒后系统弹框 “Matisse无响应。是否将其关闭?”

2781576481530_ pic_hd

cinocai avatar Feb 26 '20 07:02 cinocai

+1

cinocai avatar Feb 26 '20 07:02 cinocai

经过测试,目前在华为最新版本的操作系统上面不会有这个问题

在之前的版本,Mate 30 、P20、P30 上面都有此问题

目前出现的现象就是进入选择视频、或者相册的界面,有些图片或、视频是加载不出来的、然后点击预览会出现 ANR

目前唯一的方案就是将 compileSdkVersion 29、targetSdkVersion 29 修改为 28

烦请大佬尽快解决

zhanyage avatar Feb 26 '20 08:02 zhanyage

目前mate30 测试修复可用方案: 1.解决预览anr FileInputStream is = null; is = new FileInputStream(uri.getPath()); BitmapFactory.decodeFileDescriptor(is.getFD(), null, options); 2.解决缩略图加载失败,需要glide 升级至4.11+

cinocai avatar Feb 28 '20 01:02 cinocai

这周日华为 Android 10 手机有一个系统更新,安装更新之后这个问题不再出现,我这边用两台手机验证确认华为在最新系统更新中修复了这个问题。

修复后的系统版本如下: image

后台看到的 ANR 也全部都是华为 Android 10 的设备: image

荣耀V20MagicUi更新至10.0.0.189依然存在这个问题

xiaojigugu avatar Mar 08 '20 10:03 xiaojigugu

@xiaojigugu @zhanyage @AlphaGao1993

这个应该是华为系统中的,智能分辨率这个功能造成的(可能性90%)。

这功能什么时候针对什么程序启用,每台手机的做法都不一样。

我这边亲测,出现该问题的机器上,我这边有mate20p、mate30 pro 5g、p30p、p20(有的机器不会出现这个BUG),关闭智能分辨率后,重启应用,缩略图之前不显示的,可以显示出来;预览大图不会卡死

mate30 pro 5g 最新系统版本号都20X+了。但mate20p和mate30,却在18X+。故认为不能通过系统更新判断是否修复。

同时,如果关闭了智能分辨率,图片可以大图预览(都可行,目前还没遇到不可生效的机器),则切换回智能分辨率,BUG无法重现。从此之后都正常了。(所以也不保证百分之百是智能分辨率问题)。

我这边的解决方式,是华为EMUI10,且Android10的系统,全部调用系统的com.android.gallery3d的picker进行图片视频选择。

xuhaoyang avatar Mar 13 '20 17:03 xuhaoyang

我觉得还是跟 scope storage 有关。

buildToolsVersion=29.0.2 compileSdkVersion=29

代码里都用 URI,然后加 requestLegacyExternalStorage, 就完全好了,读取bitmap用的也是 decodeStream()

所以这可以算个解决方案,等Android N 忽略这个requestLegacyExternalStorage 属性的时候,我相信华为在 android N应该解决了这个bug

xiaos avatar Mar 27 '20 13:03 xiaos

这个bug太恶心, 预览图片,播放视频都有影响。

xiaos avatar Mar 28 '20 12:03 xiaos

这个问题有哪位大佬解决了的,我这边的情况是,一会可以预览,一会又不能预览,有时候加载图片很慢,有时候预览图片直接应用就崩溃到桌面了,没有看到崩溃日志

wyw582454356 avatar Apr 07 '20 07:04 wyw582454356

这个问题有哪位大佬解决了的,我这边的情况是,一会可以预览,一会又不能预览,有时候加载图片很慢,有时候预览图片直接应用就崩溃到桌面了,没有看到崩溃日志

遇到的问题跟你一样,时有时无的,而且一旦遇到没有任何日志。

xiaos avatar Apr 07 '20 13:04 xiaos