Android拍照后通知更新相册无效果搜遍全网原来是这个原因

Posted 汤米粥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android拍照后通知更新相册无效果搜遍全网原来是这个原因相关的知识,希望对你有一定的参考价值。

本次是给uniAPP开发原生插件的项目
在开发过程中发现,保存好自己app内截获的图片视频后,相册里面并没有,只有去文件夹里面找,站在产品的角度来讲这就对用户非常的不友好。所以需要通知相册去扫描我们保存文件的地方。
低版本API中常用的就是通过广播去更新,举个例子(代码来源于看过的帖子,后附地址链接):

String path = "文件路径";
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(path));
intent.setData(uri);
activity.sendBroadcast(intent);

(https://blog.csdn.net/xing_xiangrong/article/details/94602602)
这是我在低版本API中用到 方法,亲测可用,但是在高本版API中你会发现ACTION_MEDIA_SCANN
ER_SCAN_FILE已经被弃用。
但是我目前的插件项目是高版本API30(其实是自己nc把api设置为30),然后就出现了很多奇怪的问题。比如,以上方法就行不通。然后我在网上陆陆续续的查看了很多的类似方法,都没有实现。保存之后根本没法通知相册更新,在这里推荐一篇是我看到写的不错的文章,https://blog.csdn.net/xiayiye5/article/details/117221591
相信你们要问了,这文章行了吗?结果是:我按照这边文章测试了。文章的代码能跑起来,但是移到我的项目就不行!废话少说直接进入最终环节:
我就思考,上面那篇文基本我就是照着cv过来的,为什么不行?我一步一步排查,最终发现,我们存储的路径不一样。我是储存在getExternalFilesDir()的目录下,也就是android/data/data/包名下面。好,神奇事情来了。我果断猜测是android升级之后产生的问题,换一个API低于29的模拟器测试一下,果然相册成功刷新!!!
既然发现问题了,去查询官方文档!如下:

好了,API29也就是Android11强制分区,虽然官方建议存储外部文件到android/data/data/包名下面,但是存在到这个地方用MediaScannerConnection.scanFile()就找不到 无法通知相册进行更新了,没办法,只好自己用getExternalStorageDirectory()的方法在外部存储自己新建文件夹来存放(ps:主要在AndroidManifest里面设置 android:requestLegacyExternalStorage="true",不然你没办法访问 )。

总结:
1 没事别乱升级targetSdkVersion !!!
2 整件事就是因为getExternalFilesDir()创建的目录在高于29的机器上无法被媒体扫描器找到
3 总之我目前的办法就是把存储文件的路径换到外面来(非android/data/data/包名下面无法被访问的文件就行)。
4 android:requestLegacyExternalStorage="true"只对api29有用,低版本不需要,高版本不适用,只是用来过渡api29的,所以如果你的targetSdkVersion大于29,创建文件夹还是会失败,我也不知道怎么办了,后面我知道了会附上,暂时告一段落。
ps:希望知道的老哥回复一下。共同进步。
 
原文链接:https://blog.csdn.net/qq_37210897/article/details/119803043

以上是关于Android拍照后通知更新相册无效果搜遍全网原来是这个原因的主要内容,如果未能解决你的问题,请参考以下文章

Android中拍照(相册中选择)并上传图片功能(包括动态获取权限)

Android拍照,相册选择图片以及Android6.0权限管理

Android 头像选择(拍照相册裁剪),含7.0的坑

Android拍照调用系统相册仿微信封装总结,治疗各种崩溃,图片横竖问题压缩等问题。

Android 拍照或相册选择照片进行显示缩放位图 Demo

Android WebView 调用系统拍照和相册