国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android N獲取外置SD卡或掛載U盤路徑的方法

2019-10-21 21:43:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在Android N上并沒有提供直接的方法獲取外置SD卡或掛載U盤路徑,可以通過(guò)下面方法獲取內(nèi)置sd卡路徑

Environment.getExternalStorageDirectory().getAbsolutePath();

通過(guò)查看getExternalStorageDirectory源碼發(fā)現(xiàn),Android只是沒有公開的接口獲取而已

 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; }

竟然沒有公開的接口調(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盤路徑

  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");   //通過(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盤路徑的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 顺平县| 泊头市| SHOW| 娱乐| 漳平市| 桐柏县| 麻城市| 汕头市| 东至县| 如东县| 特克斯县| 巨鹿县| 苗栗市| 固原市| 昌乐县| 房产| 林西县| 常德市| 股票| 徐水县| 淮北市| 镇平县| 无棣县| 承德市| 淳安县| 即墨市| 普格县| 全州县| 休宁县| 福贡县| 敦化市| 武城县| 繁昌县| 陆良县| 博客| 尚义县| 施甸县| 雅江县| 永德县| 自贡市| 平远县|