关于外置SDCARD权限问题

今天应用层的说是apk无法在外置SDCARD写数据,豌豆荚也创建不了,我仔细在adb下看了SDCARD的权限,如图:

151307_mDEp_1176566.jpg

我要说的是EXTSD(sdcard是系统从nand分配的内存),拥有者是SYStem,media_rw为用户组,拥有者是没有读写权限的,而media_rw是可读可写可执行的,其他用户是没有写的权限(由此可见该APK所属其他用户),这个问题我尝试这在init.rc中用chmod 777 /mnt/extsd 来增加权限,但是可惜的是在系统启动的时候通过串口ll查看确实是改过来了 ,但是等android完全跑起来之后,通过ADB查看,还是原样的075的权限;

原因是在VOLD的检测到外置SDCARD的时候又重新分配了权限;

怎么解决呢?

第一是:

修改源码system/vold/Volume.cpp

if (primaryStorage) {
            // Special case the primary SD card.
            // For this we grant write access to the SDCARD_RW group.
            gid = AID_SDCARD_RW;
        } else {
            // For secondary external storage we keep things locked up.
            gid = AID_MEDIA_RW;
        }
改为

if (1) {
            // Special case the primary SD card.
            // For this we grant write access to the SDCARD_RW group.
            gid = AID_SDCARD_RW;
        } else {
            // For secondary external storage we keep things locked up.
            gid = AID_MEDIA_RW;
        }

方法二:

在android/out/target/product/wing-k70/system/etc/permissions目录下的platform.xml

如果没有源码的话,就下个ES,修改同样是修改system/etc/permissions目录下的platform.xml


<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
      <group gid="sdcard_rw" />
    </permission>
改为
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
      <group gid="sdcard_rw" />
      <group gid="media_rw" />
    </permission>

保存,重启。所有的应用都能够打开extsd卡上文件并修改保存,pptv也能把下载地址设置为extsd。另外360手机助手也能直接操作extsd卡上的内容进行删除。

在到/mnt下ll,如图:

153324_rqIS_1176566.jpg

extsd的权限已改为777;

这样做只是能保证我们的APK能读写外置SDCARD,但是有没有安全的问题,有待发现!


转载于:https://my.oschina.net/u/1176566/blog/192585

在 Android 中申请访问 sdcard权限,你需要在 AndroidManifest.xml 文件中添加以下权限声明: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` READ_EXTERNAL_STORAGE 权限用于读取外部存储器(如 sdcard)中的文件,而 WRITE_EXTERNAL_STORAGE 权限用于向外部存储器写入文件。 请注意,自 Android 6.0(API 级别 23)起,访问外部存储器被认为是危险权限,需要在运行时请求。你可以使用以下代码在运行时请求这些权限: ```java // 检查是否已经获得了权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // 请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE); } // 处理权限请求的结果 @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == READ_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 已经获得了访问 sdcard权限,可以进行相关操作 } else { // 未获得访问 sdcard权限,无法进行相关操作 } } } ``` 请记得在请求 WRITE_EXTERNAL_STORAGE 权限时也需要类似的处理逻辑。 希望这些信息对你有所帮助!如果有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值