Android 各版本 SD卡檔案讀寫變化及其音樂播放
1.Android6.0 平臺應用獲取外接sd卡路徑
Android6.0 上會根據卡的種類和卡的掛載狀態來動態生成掛載路徑,因此不建議大家在按照以前的方法獲取外接SD卡或者usbotg的路徑,建議按照以下方法來獲取:
[程式碼]xml程式碼:
StorageManager mStorageManager = StorageManager.from(context);
finalList vols = mStorageManager.getVolumes();
VolumeInfo sdcardVolume = null ;
for(VolumeInfo vol : vols){
if(vol.getDisk() != null && vol.getDisk().isSd())sdcardVolume = vol;
//如果需要獲取usbotg的路徑,則改為
// if(vol.getDisk() != null &&vol.getDisk().isUsb()) usbotgVolume = vol;
}
if(sdcardVolume!= null) {
String sdcardPath = sdcardVolume.getPath()==null ? null :sdcardVolume.getPath().toString();
String sdcardState = sdcardVolume.getEnvironmentForState(sdcardVolume.getState());
if(sdcardState.equals(Environment.MEDIA_MOUNTED) && sdcardPath != null){
//外接SD卡已掛載,且路徑有效
// sdcardPath 外接SD卡的路徑
}
}
2.Android6.0 storage目錄sd卡儲存的路徑建立
之前一直很疑惑,android6.0上sd卡掛載storage下的sd卡路徑是什麼時候建立的。
因為掛載sd卡的PublicVolume,負責建立mount路徑,然後掛載。
接著會建立幾個fuse路徑,如下:
1./mnt/runtime/default/
2./mnt/runtime/read/
3./mnt/runtime/write/
然後會把這個mount的路徑fuse到上面這幾個路徑。
但是一直沒有storage/下sd卡路徑的建立,而在PublicVolume下doMount函式也只有設定mPath為storage/....確沒有建立這個路徑。
後來終於在init.rc中發現下面這句
[程式碼]xml程式碼:
on post-fs
start logd
#add for amt
chmod 0755 /amt
# once everything is setup, no need to modify /
mount rootfs rootfs / ro remount
# Mount shared so changes propagate into child namespaces
mount rootfs rootfs / shared rec
# Mount default storage into root namespace
mount none /mnt/runtime/default /storage slave bind rec
3.Android 4.4 SD卡檔案讀寫變化:
Context.getExternalFilesDirs(), 返回多個sd卡的該應用私有資料區的files目錄
[程式碼]xml程式碼:
/storage/sdcard0/Android/data/<包名>/files
/storage/sdcard1/Android/data/<包名>/files
Context.getExternalCacheDirs(), 返回多個sd卡下該應用私有資料庫的快取目錄
[程式碼]xml程式碼:
/storage/sdcard0/Android/data/<包名>/caches
/storage/sdcard1/Android/data/<包名>/caches
Context.getObbDirs(), 返回多個sd卡下obb目錄下的私有資料
[程式碼]xml程式碼:
/storage/sdcard0/Android/obb/<包名>
/storage/sdcard1/Android/obb/<包名>
目前這些api均為hide,需透過反射呼叫
對讀寫許可權的修改
如果應該僅需讀取sd卡下該應用私有資料的資料,則不需要申請讀寫許可權(WRITE_EXTERNAL_STORAGE 、READ_EXTERNAL_STORAGE )
如果需要讀取sd卡其他目錄,則需宣告讀sd卡許可權
如果需要寫入sd卡其他目錄,則需宣告寫sd卡許可權
對於存在多個sd卡的情況,僅對主卡、及每張卡的私有資料區下的檔案有讀寫許可權,對其他卡沒有寫許可權(之前廠商實現中,對每張sd卡均有讀寫許可權)
1.在內建卡進行寫操作【android.permission.WRITE_EXTERNAL_STORAGE 的許可權用來設定了內建sd卡的寫許可權,如果在manifest中只是配置了這個許可權,那個應用只能在內建sd卡中進行寫操作】
或在內建卡進行讀操作【<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>該程式可以讀取裝置外部儲存空間(內建SDcard和外接SDCard)的檔案,如果您的App已經新增了“WRITE_EXTERNAL_STORAGE ”許可權 ,則就沒必要新增讀的許可權了,寫許可權已經包含了讀許可權了。】
2.然後再手機記憶體卡中:Android-->data中設定一個資料夾,然後再資料夾中放置要儲存的音樂檔案;
3.在Android工程裡,設定路徑是: "/storage/sdcard0/Android/data/HandlerActivity/goldfallen.mp3";
4.在工程裡播放音樂:
[程式碼]xml程式碼:
//例項化MediaPlayer
MediaPlayer player = MediaPlayer.create(this,R.raw.test);
//開始播放
player.start();
5.在資料夾中設定播放音樂
1)例項化一個MediaPlayer
2)呼叫setDataSource()方法設定播放檔案路徑
3)先呼叫prepare(),然後呼叫start()方法播放
[程式碼]xml程式碼:
//例項化MediaPlayer
MediaPlayer mp = new MediaPlayer();
//播放路徑
String path = “/sdcard/test.mp3”;
//為MediaPlayer設定資料來源
mp.setDataSource(path);
//準備
mp.prepare();
//播放
mp.start();
6.從網路中播放
方法一
1)建立URI例項
2)根據一個MediaPlayer例項,使用MediaPlayer的靜態方法create(),透過傳遞URI引數完成
3)呼叫start()方法開始播放
[程式碼]xml程式碼:
//播放路徑
String path = “”;
//將字串URI解析為URI例項
Uri uri = Uri.parse(path);
//例項化MediaPlayer
MediaPlayer player = MediaPlayer.create(this,uri);
//播放
player.start();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4289/viewspace-2816071/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Android APK】解析SD卡上的APK檔案AndroidAPKSD卡
- Arduino+ESP32 之 SD卡讀寫UISD卡
- 針對Android訪問sd卡里面的音訊檔案AndroidSD卡音訊
- Android 播放raw資料夾下音訊檔案Android音訊
- Android開源線上音樂播放器——波尼音樂Android播放器
- Android獲取本機各種型別檔案列表(音樂、影片、圖片、文件等)Android型別
- Android開源音樂播放器之高仿雲音樂黑膠唱片Android播放器
- sd卡防寫不能格式化win10_win10系統sd卡防寫怎麼格式化SD卡Win10
- Android 音樂播放器開發實錄(MediaSession)Android播放器Session
- sd卡刪除的檔案如何恢復SD卡
- 在.net中讀寫config檔案的各種方法
- 深入解讀.NET MAUI音樂播放器專案(三):介面互動UI播放器
- c#音樂播放C#
- Android開源音樂播放器之播放器基本功能Android播放器
- Android開源音樂播放器之線上音樂列表自動載入更多Android播放器
- 深入解讀.NET MAUI音樂播放器專案(一):概述與架構UI播放器架構
- 再談檔案讀寫:判斷檔案的幾種方法及其優劣對比
- 如何在Android上播放swf檔案Android
- 檔案排版(文字檔案讀寫)
- vue音樂播放器Vue播放器
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- 檔案的讀寫
- vue..js 編寫的簡單音樂播放器VueJS播放器
- android 音訊播放 SoundPoolAndroid音訊
- python如何開啟音樂檔案Python
- 東芝EXCERIA PRO N502 SD卡評測 極速讀寫SD卡
- sd卡中的資料夾刪除了怎麼恢復,SD卡刪除的檔案如何恢復SD卡
- 千千音樂 for Mac(原百度音樂播放器)Mac播放器
- 音樂播放器:Swinsian for Mac播放器Mac
- TurnTable for Mac音樂播放器Mac播放器
- Listen 1音樂播放器播放器
- python讀寫excel檔案PythonExcel
- C++讀寫檔案C++
- 普通檔案的讀寫