經過ARM板-RK3288和小米手機的測試。親測可以使用。
博客中寫的欠缺的地方,無所謂,直接去看代碼,裡面的注釋很詳細。程序員看代碼就行了,每個函數全部封裝好了,廢話不多話。博客很長,大家慢慢看,看完一勞永逸,以後直接調我的函數就行了,但是講的很詳細,全部都是對比的來實現,方便大家的閱讀。
總體:大家依據直接餓的需求去看
一、先大體的介紹一下理論部分,這里還是很重要的。
二、常見的存儲數據的方式
三、IO 文件流的讀取方式
四、sharedPreference 存儲
五、SQLite的存儲方式
六、assets的存儲方式
七、res的存儲方式
八、raw的存儲方式
一、先大體的介紹一下理論部分,這里還是很重要的。
安卓存儲文件、數據的地方: RAM、ROM、內存(內部存儲器)、APP程序裡面(Assets,raw,res),SD卡(早期的安卓的可以插卡,現在的不支持了,但是有些 arm板 嵌入式方向的還是帶卡槽的),總體上來說就是這些了,網路。
接下來再細分:
1、RAM、ROM 這些東西我們就別碰了,不然一大堆問題,Environment.getRootDirectory() 需要獲取root許可權,不合適
2、內存和SD卡 大家得理解 Environment.getExternalStorageState() 代表的是什麼意思,不是插卡的SD卡,而是說你買了開發板、手機,廠家送你的存儲地方(直接你得讓他送你哈)。 這部分作為主要的存儲路徑,小數據和大數據都適用。
3、SD卡,黑色那張卡,老古董,現在手機都沒有了,不建議大家使用,非要去使用,我也寫了相關的代碼(根據機型,不通用,切記,不能用不能怪我,這個只提供思路)。
4、網路,請求自己的伺服器,讀取數據,URI的方式,httpClient post 和 get 兩種請求數據的方式
存儲的地方就這么多了。
二、常見的存儲數據的方式
1、sharedPreference, 將數據保存為 xml 的格式,
2、資料庫 將SQLite的方式
3、contentprovider APP之間交互數據的方式。(這里不講,沒有用過,沒有發言權)
4、文件的讀取(IO流) 和 java的操作類似。
5、Android內部的存儲 assets,res, raw, 三者的區別
assets 和 raw 是不會隨著 APP進行編譯, res下的文件會隨著app一起編譯,每次 shift+alt+x 都要等好久
assets目錄下可以創建子文件夾 raw 不可以
❷ android P系統WRITE_MEDIA_STORAGE添加讀寫SD卡許可權
由於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
方法二、修改system\vold\model\PublicVolume.cpp
參考:
https://blog.csdn.net/ch853199769/article/details/88052886
https://blog.csdn.net/qq_27061049/article/details/93715885
❸ Android 6.0 讀寫SD卡許可權問題
Android 6.0 下默認存儲SD卡,使用原生FMRadio生成的文件保存到內部存儲中
【預置條件】插入T卡【操作步驟】設置>存儲設備和USB>選擇SD卡為默認存儲>收音機錄音【實際結果】收音機的錄音文件未保存到T卡【預期結果】收音機的錄音文件保存到T卡【復現概率】10/10
此外,SoundRecorder默認存儲SD卡,生成的文件卻可以保存到SD卡中
1、收音機文件沒有保存到指定的SD卡目錄下,因此可能是文件的路徑不對。
2、進入設置中,切換默認存儲位置,內部存儲或者SD卡,每次切換都會修改系統中某一屬性值。
3、當收音機文件保存的時候,必須要讀取當前系統的默認存儲路徑,然後生成自己的文件路徑。
STEP1、初步解決方案,但沒有生效,引入新問題
對比 SoundRecorder ,根據GIT庫中,之前的同事的修改記錄,找到可能的解決方案,修改如下:
引入新的問題,此時,點擊 Start Recording 會提示內部錯誤。
分析Log發現,由於許可權拒絕,拋出IO異常
01-01 07:35:38.167 7467 7467 W System.err: java.io .IOException: open failed: EACCES (Permission denied)
STEP2、Android M 下SD卡讀寫許可權問題
分析由於許可權問題後,結合Android M new design,開始查找文檔,尋找解決Android M 下SD卡讀寫許可權問題
Android6.0中的運行時請求許可權
後來,試了好幾種方法,但都沒有用,以及報問題「EACCES (Permission denied)」
STEP3、再分析可能是運行時許可權問題
判斷APP運行時許可權如下:
發現此時,FMRadio對於的組許可權如下:
com.android.fmradio Groups: 1013 3002 3003 9997 50010
com.android.soundrecorder Groups: 1015 1023 3003 9997 50105
根據 系統許可權 的定義,有興趣的同學可以去看一下這個文件 system/core/include/private/android_filesystem_config.h
分析這些Gid發現:
1015 為sdcard_rw,1023 為media_rw許可權
因此,得出結論如下
1、首先修改AndroidManifest.xml文件,新增許可權,確保FMRadio應用級的許可權;
2、原生FMRadio使用過程中,會進行運行時的許可權檢查,故FMRadio運行時應該拿到了WRITE_EXTERNAL_STORAGE,以及READ_EXTERNAL_STORAGE許可權,
3、但是由於FMRadio本身不具備「1015,1023」組許可權,這些許可權無效,仍然無法對SD卡進行讀寫操作。
STEP4、最終解決方案
在 STEP1 的修改基礎上,在框架層,許可權對應組中給予FMRadio相應的組許可權,新增修改如下:
frameworks/base/data/etc/platform.xml
重編framework.jar, 將修改後的jar文件push到手機,重啟
此時,再檢查FMRadio對於的組許可權如下:
com.android.fmradio Groups: 1013** 1015 1023** 3002 3003 9997 50010
到此為止,
❹ 如何在 Android 5.0 上獲取 SD卡 的讀寫許可權
1.首先請安裝「Root Explorer」這個app,它可以在已ROOT的手機中管理隱藏的系統核心檔案。 2.安裝完成並開啟Root Explorer以後,展開「/system/etc/permissions/」路徑,然後在「platform.xml」上長按。 3.跳出「Options」選單以後,先按一下「Permissions」,我們要更改檔案的許可權才能寫入文字。 4.此時會跳出一個警告訊息,告知你目前系統內的檔案為唯讀模式,需先更改為讀寫模式,按下「Yes」即可更改。 5.更改完成以後,將「Read」、「Write」、「Execute」項目都勾起來,然後按一下「OK」。 6.許可權更改完成以後,再次在「platform.xml」上長按一次。 7.跳出「Options」選單以後,這次我們點擊「Open With」,選擇用哪個app開啟此檔案。 8.看到顯示了一堆app,我們選擇用「Text Viewer」來開啟,如果讀者們有其他的文字編輯app,也可以用它來開啟。 9.找到以下兩段文字以後,將內容改成跟底下一樣: <permission name="android.permission.WRITE_EXTERNAL_STORAGE" > <group gid="sdcard_r" /> <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission> <permission name="android.permission.WRITE_MEDIA_STORAGE" > <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission> 10.更改完成以後,點擊一下叫出選單,點擊「Save Changes」儲存更改,然後離開即可。 11.儲存成功以後,可以看到資料夾中多了一個「platform.xml.bak」檔案,往後要還原時,只要將「platform.xml」刪除,然後把「platform.xml.bak」更改回原來名稱即可。 12.最後重新開啟手機,即可讓設定生效羅! NOTE: 坊間已經有直接可以修改SD卡寫入許可權的app出現,但因為安全因素,我們還是自行手動修改比較安全。
❺ 如何讀取SD卡CSV文件或指定的路徑在android系統
android手機獲取自帶存儲路徑和sd卡存儲路徑的方式是:調用Environment.getExternalStorageDirectory(),返回的存儲目錄並不是系統內置的SD卡目錄。
1.一部分手機將eMMC存儲掛載到 /mnt/external_sd 、/mnt/sdcard2 等節點,而將外置的SD卡掛載到 Environment.getExternalStorageDirectory()這個結點。
此時,調用Environment.getExternalStorageDirectory(),則返回外置的SD的路徑。
2.而另一部分手機直接將eMMC存儲掛載在Environment.getExternalStorageDirectory()這個節點,而將真正的外置SD卡掛載到/mnt/external_sd、/mnt/sdcard2 等節點。
此時,調用Environment.getExternalStorageDirectory(),則返回內置的SD的路徑。
❻ android系統中,怎樣才能將文件在sdcard中進行創建,讀寫,刪除操作
我也遇到過,不過重啟下虛擬機就可以訪問了。