当前位置: 首页 > news >正文

Android 11 访问 Android/data/或者getExternalCacheDir() 非root方式

前言
需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。
getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/

获取访问权限
如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码

   android:requestLegacyExternalStorage="true"

以此禁用分区存储,但这在Android11及以上版本不起作用。

  • 非root方式 (root方式点这里)

使用 Storage Access Framework 请求访问权限。
SAF 提供了一种标准化的方式来让应用程序请求访问其他应用的文件和目录。要使用 SAF 请求访问 Android/data 目录。

	private static int REQUEST_CODE_FOR_DIR = 10525;//通过SAF获取权限public  void startForSAF(Activity activity) {Uri uri = Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata");DocumentFile documentFile = DocumentFile.fromTreeUri(activity, uri);Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION| Intent.FLAG_GRANT_WRITE_URI_PERMISSION| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);assert documentFile != null;intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, documentFile.getUri());activity.startActivityForResult(intent, REQUEST_CODE_FOR_DIR);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);Uri uri;if (requestCode == REQUEST_CODE_FOR_DIR && (uri = data.getData()) != null) {getContentResolver().takePersistableUriPermission(uri, data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));finish();}}
    //使用时public static Uri pathToUri(String path) {return Uri.parse("content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata/document/primary%3A" +path.replace("/storage/emulated/0/", "").replace("/", "%2F"));}

效果如下:
在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/296157.html

相关文章:

  • Eclipse安装配置、卸载教程(Windows版)
  • 正点原子--STM32基本定时器学习笔记(2)
  • 学习笔记:正则表达式
  • 03-抓包_封包_协议_APP_小程序_PC应用_WEB应用
  • C语言笔试题之实现C库函数 strstr()(设置标志位)
  • 什么是IDE,新手用哪个IDE比较好
  • Flask 入门6:模板继承
  • 欢迎来到操作系统的世界
  • 寒假作业-day5
  • 互联网加竞赛 基于深度学的图像修复 图像补全
  • 用于制作耳机壳的UV树脂耳机壳UV胶价格高不高?
  • 【开源】JAVA+Vue+SpringBoot实现房屋出售出租系统
  • Golang 并发 生产者消费者模式
  • Win32 SDK Gui编程系列之--ListView自绘OwnerDraw
  • 深度学习本科课程 实验5 循环神经网络
  • Redis篇之过期淘汰策略
  • 【Kubernetes】kubectl top pod 异常?
  • 前后端分离项目:前端的文件夹应该叫什么名字,后端呢
  • 2024.2.6
  • 如何在 Microsoft Azure 上部署和管理 Elastic Stack
  • 在Visual Studio中引用和链接OpenSceneGraph (OSG) 库
  • [缓存] - Redis
  • spring boot和spring cloud项目中配置文件application和bootstrap加载顺序
  • AdaBoost算法
  • 基于 elasticsearch v8 的 CRUD 操作及测试用例
  • 深度学习的新进展:解析技术演进与应用前景
  • 【第二届 Runway短视频创作大赛】——截至日期2024年03月01日
  • UniApp 快速上手与深度学习指南
  • 10个简单有效的编辑PDF文件工具分享
  • 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)