Android系统第三方应用无法读写外置TF卡

Android系统第三方应用无法读写外置TF卡

车载设备会挂载TF卡进行视频录像的存储,第三方app需要在TF卡目录下进行修改、创建、删除文件等操作,但是外置TF卡第三方应用没有读写权限。

  • 需求实现

AndroidManifest.xml添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />

尝试在TF卡创建文件夹

try {
    File folder = new File("/storage/5611-15D4/newfolder");
    if (!folder.exists()) {
        folder.mkdir();
    }
} catch (Exception e) {
    e.printStackTrace();
}

报错

E/File: err java.io.IOException: Permission denied
  • 解决方案

在Android中有些权限只能有系统签名的app才能申请,第三方app不能申请。如果要开放某个权限给第三方,我们只能修改系统源码。android.permission.WRITE_MEDIA_STORAGE 是SD卡写权限,只有系统签名的app才可以申请,第三方app如果要写SD卡 只能用 SAF。

此处实现把 android.permission.WRITE_MEDIA_STORAGE 开放给第三方应用,验证Android7系统可以完成写入。

diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
index 59f7c11..825e76e 100755
--- a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -10151,7 +10151,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                 case PermissionInfo.PROTECTION_SIGNATURE: {
                     // For all apps signature permissions are install time ones.
                     allowedSig = grantSignaturePermission(perm, pkg, bp, origPermissions);
-                    if (allowedSig) {
+                    if (allowedSig || perm.equals("android.permission.WRITE_MEDIA_STORAGE")) {//或者if(true),或者if (allowedSig || pkg.packageName.equals(package_name))
                         grant = GRANT_INSTALL;
                     }
                 } break;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值