关于Android11如何使用直接路径对data和obb目录进行操作

关于Android11如何使用直接路径对data和obb目录进行操作

问题背景

Android11及更高版本,谷歌直接限制了对data和obb目录的访问,File API的很多方法都不再适用:
假如我们要复制一个文件到obb目录,会报以下权限问题而失败

2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Android/obb/com.xxx.yyy.zzz/main.1.com.xxx.yyy.zzz.obb: open failed: EACCES (Permission denied)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.IoBridge.open(IoBridge.java:492)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:236)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at java.io.FileOutputStream.(FileOutputStream.java:186)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at com.kuntliu.loghelper.ObbFile$1$2.run(ObbFile.java:158)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at java.lang.Thread.run(Thread.java:923)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.Linux.open(Native Method)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
2021-08-03 13:20:29.646 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
2021-08-03 13:20:29.647 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
2021-08-03 13:20:29.647 28577-25413/com.kuntliu.loghelper W/System.err: at android.app.ActivityThreadAndroidOs.open(ActivityThread.java:8373)
2021-08-03 13:20:29.647 28577-25413/com.kuntliu.loghelper W/System.err: at libcore.io.IoBridge.open(IoBridge.java:478)
2021-08-03 13:20:29.647 28577-25413/com.kuntliu.loghelper W/System.err: … 4 more

在这里插入图片描述

那么该如何规避绕过这个限制呢,其实很简单,去申请一个安装未知来源的权限即可

 Uri uri = Uri.parse("package:"+ context.getPackageName());
 Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, uri);
 context.startActivity(intent);

备注:如果有什么错误希望可以大胆指出,本人新手一枚🤣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值