IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 记录关于兼容Android10(API29)以上保存图片视频后通知相册更新的问题 -> 正文阅读

[移动开发]记录关于兼容Android10(API29)以上保存图片视频后通知相册更新的问题

本次是给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:希望知道的老哥回复一下。共同进步。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:14:29  更:2021-08-20 15:16:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:51:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码