Android N獲取外置SD卡或掛載U盤路徑的方法
在Android N上并沒有提供直接的方法獲取外置SD卡或掛載U盤路徑,可以通過下面方法獲取內(nèi)置sd卡路徑
Environment.getExternalStorageDirectory().getAbsolutePath();
通過查看getExternalStorageDirectory源碼發(fā)現(xiàn),Android只是沒有公開的接口獲取而已
public static File getExternalStorageDirectory() {
throwIfUserRequired();
return sCurrentUser.getExternalDirs()[0];
}
內(nèi)置sd卡取的sCurrentUser.getExternalDirs()中的第一個值,通過查看StorageManager公有的方法,發(fā)下StorageManager@getStorageVolumes也能獲取到所有的StorageVolume,但是通過StorageVolume對象只能調(diào)用到一些簡單的方法,發(fā)現(xiàn)StorageVolume有很多隱藏方法如下:
frameworks/base/core/java/android/os/storage/StorageVolume.java
/**
* Returns true if the volume is removable.
*
* @return is removable
*/
public boolean isRemovable() {
return mRemovable;
}
/**
* Returns the mount path for the volume.
*
* @return the mount path
* @hide
*/
public String getPath() {
return mPath.toString();
}
/** {@hide} */
public File getPathFile() {
return mPath;
}
竟然沒有公開的接口調(diào)用這些方法,那就只能想到反射了,具體實現(xiàn)方式如下:
1、在清掉AndroidManifest.xml文件中添加需要的權(quán)限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2、通過反射獲取外置SD卡或掛載U盤路徑
private StorageManager mStorageManager;
mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
//獲取所有掛載的設(shè)備(內(nèi)部sd卡、外部sd卡、掛載的U盤)
List<StorageVolume> volumes = mStorageManager.getStorageVolumes();
try {
Class<?> storageVolumeClazz = Class
.forName("android.os.storage.StorageVolume");
//通過反射調(diào)用系統(tǒng)hide的方法
Method getPath = storageVolumeClazz.getMethod("getPath");
Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
for (int i = 0; i < volumes.size(); i++) {
StorageVolume storageVolume = volumes.get(i);//獲取每個掛載的StorageVolume
//通過反射調(diào)用getPath、isRemovable
String storagePath = (String) getPath.invoke(storageVolume); //獲取路徑
boolean isRemovableResult = (boolean) isRemovable.invoke(storageVolume);//是否可移除
String description = storageVolume.getDescription(this);
Log.d("jason", " i=" + i + " ,storagePath=" + storagePath
+ " ,isRemovableResult=" + isRemovableResult +" ,description="+description);
}
} catch (Exception e) {
Log.d("jason", " e:" + e);
}
以上這篇Android N獲取外置SD卡或掛載U盤路徑的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android開發(fā)之滑動數(shù)值選擇器NumberPicker用法示例
這篇文章主要介紹了Android開發(fā)之滑動數(shù)值選擇器NumberPicker用法,結(jié)合實例形式分析了Android滑動數(shù)值選擇器NumberPicker的功能、相關(guān)函數(shù)、事件監(jiān)聽、界面布局等操作技巧,需要的朋友可以參考下2019-03-03
Android?OkHttp庫簡單使用和封裝教程助你快速掌握網(wǎng)絡(luò)請求技能
OkHttp是一個高效的HTTP客戶端庫,適用于Android和Java應(yīng)用程序。它支持HTTP/2和SPDY協(xié)議,提供了同步和異步請求API、請求和響應(yīng)攔截器、連接池和多路復用器、緩存支持、GZIP和DEFLATE壓縮等功能,可以大大提高網(wǎng)絡(luò)請求的性能和可擴展性2023-04-04
Android WebView或手機瀏覽器打開連接問題解決辦法總結(jié)
這篇文章主要介紹了Android WebView或手機瀏覽器打開連接問題解決辦法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-03-03
Android 自動化測試經(jīng)驗分享 深入UiScrollable
UiScrollable是一個UiCollection(這東西還沒搞懂),我們可以使用它,在可滑動的頁面(水平滑動或上下滑動都可以)上查找我們想要的控件(item)2013-05-05
Android實現(xiàn)多參數(shù)文件和數(shù)據(jù)上傳
這篇文章主要為大家詳細介紹了Android實現(xiàn)多參數(shù)文件和數(shù)據(jù)上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Android TextView跑馬燈效果實現(xiàn)方法
這篇文章主要介紹了Android TextView跑馬燈效果實現(xiàn)方法,涉及Android布局文件中相關(guān)屬性的設(shè)置技巧,非常簡單實用,需要的朋友可以參考下2016-01-01
使用ViewPager實現(xiàn)高仿launcher左右拖動效果
今天用ViewPager這個類實現(xiàn)了同樣的左右拖動效果,這樣代碼更少,但是效果是一樣的,ViewPager是實現(xiàn)左右兩個屏幕平滑地切換的一個類,它是Google提供的,有需要的朋友可以了解下2013-01-01

