Android N獲取外置SD卡或掛載U盤(pán)路徑的方法
在Android N上并沒(méi)有提供直接的方法獲取外置SD卡或掛載U盤(pán)路徑,可以通過(guò)下面方法獲取內(nèi)置sd卡路徑
Environment.getExternalStorageDirectory().getAbsolutePath();
通過(guò)查看getExternalStorageDirectory源碼發(fā)現(xiàn),Android只是沒(méi)有公開(kāi)的接口獲取而已
public static File getExternalStorageDirectory() { throwIfUserRequired(); return sCurrentUser.getExternalDirs()[0]; }
內(nèi)置sd卡取的sCurrentUser.getExternalDirs()中的第一個(gè)值,通過(guò)查看StorageManager公有的方法,發(fā)下StorageManager@getStorageVolumes也能獲取到所有的StorageVolume,但是通過(guò)StorageVolume對(duì)象只能調(diào)用到一些簡(jiǎn)單的方法,發(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; }
竟然沒(méi)有公開(kāi)的接口調(diào)用這些方法,那就只能想到反射了,具體實(shí)現(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、通過(guò)反射獲取外置SD卡或掛載U盤(pán)路徑
private StorageManager mStorageManager; mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE); //獲取所有掛載的設(shè)備(內(nèi)部sd卡、外部sd卡、掛載的U盤(pán)) List<StorageVolume> volumes = mStorageManager.getStorageVolumes(); try { Class<?> storageVolumeClazz = Class .forName("android.os.storage.StorageVolume"); //通過(guò)反射調(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);//獲取每個(gè)掛載的StorageVolume //通過(guò)反射調(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盤(pán)路徑的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android 后臺(tái)調(diào)度任務(wù)與省電詳解
本文主要介紹 Android 后臺(tái)調(diào)度任務(wù)與省電,這里整理了詳細(xì)的知識(shí)資料供大家學(xué)習(xí)參考,希望能幫助有需要的小伙伴2016-08-08Android實(shí)現(xiàn)瘋狂連連看游戲之游戲效果預(yù)覽(一)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)瘋狂連連看游戲之游戲的效果預(yù)覽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android 進(jìn)度條顯示在標(biāo)題欄的實(shí)現(xiàn)方法
android進(jìn)度條顯示在標(biāo)題欄的實(shí)現(xiàn)方法,大概分文xml文件和java文件,具體代碼內(nèi)容大家可以通過(guò)本文學(xué)習(xí)下2017-01-01android實(shí)現(xiàn)手機(jī)傳感器調(diào)用
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)手機(jī)傳感器調(diào)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04Android系統(tǒng)在shell中的df命令實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于Android系統(tǒng)在shell中的df命令實(shí)現(xiàn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12native.js獲取手機(jī)硬件基本信息實(shí)例代碼android版
本文為大家分享了native.js獲取手機(jī)硬件基本信息實(shí)例代碼android版包括手機(jī)MAC地址,手機(jī)內(nèi)存大小,手機(jī)存儲(chǔ)空間大小,手機(jī)CPU信息等手機(jī)硬件基本信息2018-09-09Android運(yùn)動(dòng)健康睡眠自定義控件的實(shí)現(xiàn)
這篇文章主要介紹了Android實(shí)現(xiàn)運(yùn)動(dòng)健康睡眠自定義控件的方法,幫助大家更好的理解和學(xué)習(xí)使用Android開(kāi)發(fā),感興趣的朋友可以了解下2021-03-03Android ViewPagerIndicator詳解及實(shí)例代碼
這篇文章主要介紹了Android ViewPagerIndicator詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05