由于android P 版本google把android.Permission.WRITE_MEDIA_STORAGE中sd卡的读写权限移除了,导致系统文件管理中的文件无法直接复制到SD卡,所以需要把SD卡的读写权限加上到WRITE_MEDIA_STORAGE权限中去,

方法一、

1、frameworks\base\data\etc\platform.xml中添加:

2、frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java

...

public int getMountMode(int uid, String packageName) {

if (Process.isIsolated(uid)) {

return Zygote.MOUNT_EXTERNAL_NONE;

}

// modify android.Permission.WRITE_MEDIA_STORAGE add sdcard_rw permission start

if (checkUidPermission(WRITE_MEDIA_STORAGE, uid) == PERMISSION_GRANTED) {

return Zygote.MOUNT_EXTERNAL_DEFAULT;

}

// momdify end

if (checkUidPermission(READ_EXTERNAL_STORAGE, uid) == PERMISSION_DENIED) {

return Zygote.MOUNT_EXTERNAL_DEFAULT;

}

if (checkUidPermission(WRITE_EXTERNAL_STORAGE, uid) == PERMISSION_DENIED) {

return Zygote.MOUNT_EXTERNAL_READ;

}

return Zygote.MOUNT_EXTERNAL_WRITE;

}

...

方法二、修改system\vold\model\PublicVolume.cpp

...

if (getMountFlags() & MountFlags::kPrimary) {

if (execl(kFusePath, kFusePath,

"-u", "1023", // AID_MEDIA_RW

"-g", "1023", // AID_MEDIA_RW

"-U", std::to_string(getMountUserId()).c_str(),

"-w",

mRawPath.c_str(),

stableName.c_str(),

NULL)) {

PLOG(ERROR) << "Failed to exec";

}

} else {

if (execl(kFusePath, kFusePath,

"-u", "1023", // AID_MEDIA_RW

"-g", "1023", // AID_MEDIA_RW

"-U", std::to_string(getMountUserId()).c_str(),

"-w", // add this

mRawPath.c_str(),

stableName.c_str(),

NULL)) {

PLOG(ERROR) << "Failed to exec";

}

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐