android讀寫sd文件系統
『壹』 如何解決安卓系統的SD卡只讀問題
總結一下自己曾經使用及在網上搜到的解決辦法:
1、【設置】-【SD卡和手機內存設置】,先【卸下SD卡】再【安裝SD卡】。
2、使用R.E.管理器將sdcard掛載為「讀寫模式」(本人曾經試過不管用,但有機油反映有效)。
3、重啟手機。
4、關機,扣電池,裝回,重啟手機。
5、將SD卡插入讀卡器連接電腦,在XP下正確識別一次,然後安全刪除硬體(曾在上述方法皆無效時用此辦法解決過)。
6、將SD卡插入讀卡器連接電腦,在XP下找到相應的盤符,點【右鍵】-【屬性】-【工具】-【查錯
-
開始檢查】,在彈出來的對話框中勾選【自動修復文件系統錯誤】和【掃描並試圖恢復壞扇區】,然後點【開始】,待完成後,採用安全刪除硬體的方法卸下SD卡,插回手機,重啟。
7、在XP下深度格式化一次(不要勾選快速格式化),安全刪除硬體
-
插回手機
-
重啟。
8、換張SD卡吧。
『貳』 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
到此為止,
『叄』 安卓手機要怎樣才能支持NTFS格式的SD卡
如果您的Android系統具有Root許可權,建議從Google Play Store上下載Paragon NTFS&HFS+ 。
安裝上該驅動,就可以讀寫訪問NTFS格式的存儲卡了。
拓展資料:
谷歌公司(Google Inc.)成立於1998年9月4日,由拉里·佩奇和謝爾蓋·布林共同創建,被公認為全球最大的搜索引擎公司。
谷歌是一家位於美國的跨國科技企業,業務包括互聯網搜索、雲計算、廣告技術等,同時開發並提供大量基於互聯網的產品與服務,其主要利潤來自於AdWords等廣告服務。
1999年下半年,谷歌網站「Google」正式啟用。 2010年3月23日,宣布關閉在中國大陸市場搜索服務。
2015年8月10日,宣布對企業架構進行調整,並創辦了一家名為Alphabet的「傘形公司」(Umbrella Company),成為Alphabet旗下子公司。
2015年,在2015年度「世界品牌500強」排行中重返榜首,蘋果和亞馬遜分別位居第二和第三名。
2016年6月8日,《2016年BrandZ全球最具價值品牌百強榜》公布,以2291.98億美元的品牌價值重新超越蘋果成為百強第一。
2017年2月,Brand Finance發布2017年度全球500強品牌榜單,排名第一。
2017年6月,《2017年BrandZ最具價值全球品牌100強》公布,谷歌公司名列第一位。
2017年12月13日,谷歌正式宣布穀歌AI中國中心(Google AI China Center)在北京成立。
2018年1月,騰訊和谷歌宣布雙方簽署一份覆蓋多項產品和技術的專利交叉授權許可協議。
2018年5月29日,《2018年BrandZ全球最具價值品牌100強》發布,谷歌公司名列第一位。
『肆』 Android 內部存儲/外部存儲 及 讀寫許可權
Android 使用 VFS (Virtual File System) 虛擬文件系統。VFS提供了供存儲設備掛載的節點,同一存儲設備經過分區後,不同的分區可以掛載到不同的節點上,如手機的內置存儲卡。
內置存儲卡 / 外置SD卡
內部存儲 / 外部存儲
VFS 的目錄以 / 為根節點,根節點下面又有不同的節點。物理存儲設備就是掛載到這些節點上。
內部存儲卡/外置SD卡 ≠ 內部存儲/外部存儲
首先明確, 內置存儲卡/外置SD卡 是在 物理層面 相對於 手機大眾用戶 來說的。
外置SD卡:可手動插拔的SD卡。
內置存儲卡:焊接在手機內部不可拆卸的存儲卡。
而, 內部存 /外部存儲 是在 文件系統邏輯層面 相對於 開發者 來說的,指具體的路徑。
一般針對某個應用而言的,屬於該應用的存儲路徑叫內部存儲,反之為外部存儲。
路徑: /data/data/package_name
/data/data/ 下都是已安裝應用的目錄,該目錄下包含的文件都是以包名作為文件名的目錄,例如 /data/data/com.sankuai.meituan
獲取內部存儲的方式如下:
其中,參數 mode 指創建模式,一種 4 種
注意: Android 7.0 以上 android.os.Build.VERSION.SDK_INT>=Build.VERSION_CODES.N 使用3/4 常量時,將會導致SecurityException,這意味著 不能通過名稱共享私有文件 。
嘗試共享 file://URI URI將會導致FileUriExposedException,StrictMode API政策禁止在您的應用外部公開file://URL。如果您的應用需要與其他應用共享私有文件,則可以使用 FileProvider 與 FLAG_GRANT_READ_URI_PERMISSION 配合使用。 Android 7.0 行為變更 通過FileProvider在應用間共享文件吧
外部存儲,可以是 外置SD卡 或 內置存儲卡的部分分區。
外部存儲,分為 公共目錄 和 私有目錄
獲取方式
檢查可用性的方法:
Android 4.3 以下,只能通過 Context#getExternalFilesDir(type) 來獲取外部存儲在內置存儲卡分區的私有目錄,無法獲取外置SD卡。
Android 4.3 開始,可以通過 Context#getExternalFilesDirs(type) 獲取一個File數組,包含了內置存儲卡分區和外置SD的私有目錄地址。
可以使用兼容庫的靜態方法 ContextCompate.getExternalFilesDirs() 兼容 4.3。
感謝以下文章作者
解析Android內部存儲、外部存儲的區別