WRITE_MEDIA_STORAGE/WRITE_EXTERNAL_STORAGE說明

這兩種配置對SDCARD的權(quán)限控制是不一樣的。

合并分區(qū):按照谷歌4.4的要求,把sdcard,U盤等外部存儲器的權(quán)限設(shè)置為uid= AID_SYSTEM gid=AID_MEDIA_RW,mask是0002.。 這樣就要求要對sdcard等有寫權(quán)限必須要持有這個(gè)permission。

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

這個(gè)permission對應(yīng)的group信息是在frameworks/base/data/etc/platform.xml 中定義的

<permission name="android.permission.WRITE_MEDIA_STORAGE" >

<group gid="media_rw" />
</permission>

這個(gè)permission是4.4中新增的,并且是不推薦使用的。

非合并分區(qū):為了方便使用并且兼容4.2之前的APK,我們把sdcard,u盤的權(quán)限設(shè)置為uid= AID_SYSTEM gid=AID_SDCARD_RW,mask是0002.。 這樣就要求要對sdcard等有寫權(quán)限必須要持有

這個(gè)permission對應(yīng)的group信息是在frameworks/base/data/etc/platform.xml 中定義的


<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

這個(gè)permission是4.2之前就開始使用的,大家都比較熟悉。

修改方法:

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >

<group gid="sdcard_r" />
<group gid="sdcard_rw" />
</permission>

其他方案上使用了如下方法繞過這個(gè)問題,但是我是不建議使用的

就是在frameworks/base/data/etc/platform.xml 中作如下修改

即把WRITE_MEDIA_STORAGE這個(gè)permission對應(yīng)的group也賦值到WRITE_EXTERNAL_STORAGE這個(gè)權(quán)限中,也即是說WRITE_MEDIA_STORAGE這個(gè)權(quán)限的控制效果失效了。

注意:這個(gè)permission要求使用platform簽名即在Android.mk中要增加如下:

+LOCAL_CERTIFICATE := platform

這樣修改之后GMS包中的APK,以及第三方的APK就可以刪除sdcard中的文件了。但是Android系統(tǒng)中對openOutputStream還是有限制的,不允許用openOutputStream 保存文件到非主存儲器上。

現(xiàn)象是:GMS包中的Photo這個(gè)APK不能保存編輯過的sdcard中的圖片。

修改方法如下:

--- a/src/com/android/providers/media/MediaProvider.java

+++ b/src/com/android/providers/media/MediaProvider.java

@@ -4787,10 +4787,10 @@ public class MediaProvider extends ContentProvider {

c.enforceCallingOrSelfPermission(

ACCESS_CACHE_FILESYSTEM, "Cache path: " + path);

}

- } else if (isWrite) {

+ }/* else if (isWrite) {

// don't write to non-cache, non-sdcard files.

throw new FileNotFoundException("Can't access " + file);

- } else if (isSecondaryExternalPath(path)) {

+ } */else if (isSecondaryExternalPath(path)) {

// read access is OK with the appropriate permission

if (!readGranted) {

c.enforceCallingOrSelfPermission(

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容