android 6.0 sd卡读写权限,Android 6.0 读写SD卡权限问题
一、問題描述##
Android 6.0 下默認(rèn)存儲(chǔ)SD卡,使用原生FMRadio生成的文件保存到內(nèi)部存儲(chǔ)中
【預(yù)置條件】插入T卡【操作步驟】設(shè)置>存儲(chǔ)設(shè)備和USB>選擇SD卡為默認(rèn)存儲(chǔ)>收音機(jī)錄音【實(shí)際結(jié)果】收音機(jī)的錄音文件未保存到T卡【預(yù)期結(jié)果】收音機(jī)的錄音文件保存到T卡【復(fù)現(xiàn)概率】10/10
此外,SoundRecorder默認(rèn)存儲(chǔ)SD卡,生成的文件卻可以保存到SD卡中
二、問題分析##
1、收音機(jī)文件沒有保存到指定的SD卡目錄下,因此可能是文件的路徑不對(duì)。
2、進(jìn)入設(shè)置中,切換默認(rèn)存儲(chǔ)位置,內(nèi)部存儲(chǔ)或者SD卡,每次切換都會(huì)修改系統(tǒng)中某一屬性值。
3、當(dāng)收音機(jī)文件保存的時(shí)候,必須要讀取當(dāng)前系統(tǒng)的默認(rèn)存儲(chǔ)路徑,然后生成自己的文件路徑。
三、解決方案##
STEP1、初步解決方案,但沒有生效,引入新問題
對(duì)比SoundRecorder,根據(jù)GIT庫中,之前的同事的修改記錄,找到可能的解決方案,修改如下:
修改packages/apps/FMRadio/AndroidManifest.xml文件添加
修改packages/apps/FMRadio/src/com/android/fmradio/FmRecorder.java文件添加import com.mediatek.storage.StorageManagerEx;
語句替換startRecording函數(shù)String recordingSdcard = FmUtils.getDefaultStoragePath();為String recordingSdcard = StorageManagerEx.getDefaultPath();
引入新的問題,此時(shí),點(diǎn)擊 Start Recording 會(huì)提示內(nèi)部錯(cuò)誤。
分析Log發(fā)現(xiàn),由于權(quán)限拒絕,拋出IO異常
01-01 07:35:38.167 7467 7467 W System.err: java.io.IOException: open failed: EACCES (Permission denied)
STEP2、Android M 下SD卡讀寫權(quán)限問題
分析由于權(quán)限問題后,結(jié)合Android M new design,開始查找文檔,尋找解決Android M 下SD卡讀寫權(quán)限問題
Android6.0中的運(yùn)行時(shí)請(qǐng)求權(quán)限
后來,試了好幾種方法,但都沒有用,以及報(bào)問題“EACCES (Permission denied)”
STEP3、再分析可能是運(yùn)行時(shí)權(quán)限問題
判斷APP運(yùn)行時(shí)權(quán)限如下:
adb remount;//掛載
adb shell;//進(jìn)入shell
ps | grep fmradio;//查找FMRadio的PID,前提是手機(jī)打開FMRadio,插入耳機(jī)
cd proc/4830;//進(jìn)入PID對(duì)應(yīng)的信息文件中
cat status;//查看進(jìn)程信息
PID
發(fā)現(xiàn)此時(shí),FMRadio對(duì)于的組權(quán)限如下:
com.android.fmradio Groups: 1013 3002 3003 9997 50010
com.android.soundrecorder Groups: 1015 1023 3003 9997 50105
根據(jù)系統(tǒng)權(quán)限的定義,有興趣的同學(xué)可以去看一下這個(gè)文件system/core/include/private/android_filesystem_config.h
分析這些Gid發(fā)現(xiàn):
1015 為sdcard_rw,1023 為media_rw權(quán)限
因此,得出結(jié)論如下
1、首先修改AndroidManifest.xml文件,新增權(quán)限,確保FMRadio應(yīng)用級(jí)的權(quán)限;
2、原生FMRadio使用過程中,會(huì)進(jìn)行運(yùn)行時(shí)的權(quán)限檢查,故FMRadio運(yùn)行時(shí)應(yīng)該拿到了WRITE_EXTERNAL_STORAGE,以及READ_EXTERNAL_STORAGE權(quán)限,
3、但是由于FMRadio本身不具備“1015,1023”組權(quán)限,這些權(quán)限無效,仍然無法對(duì)SD卡進(jìn)行讀寫操作。
STEP4、最終解決方案
在STEP1的修改基礎(chǔ)上,在框架層,權(quán)限對(duì)應(yīng)組中給予FMRadio相應(yīng)的組權(quán)限,新增修改如下:
frameworks/base/data/etc/platform.xml
重編framework.jar, 將修改后的jar文件push到手機(jī),重啟
此時(shí),再檢查FMRadio對(duì)于的組權(quán)限如下:
com.android.fmradio Groups: 1013** 1015 1023** 3002 3003 9997 50010
運(yùn)行時(shí)組權(quán)限.png
到此為止,
修改重編framework.jar,
修改重編FMRadio.apk,再清除數(shù)據(jù)
以上push到手機(jī),
重啟驗(yàn)證,可以保存到SD卡
總結(jié)
以上是生活随笔為你收集整理的android 6.0 sd卡读写权限,Android 6.0 读写SD卡权限问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android多媒体编程题库,andro
- 下一篇: android studio 反编译工具