国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 连山| 抚州市| 利津县| 囊谦县| 普兰店市| 柘荣县| 安达市| 内丘县| 秭归县| 托克托县| 唐河县| 彭泽县| 微博| 绥滨县| 古田县| 航空| 都昌县| 通道| 武鸣县| 利辛县| 邯郸县| 廉江市| 双城市| 威海市| 腾冲县| 望都县| 通州市| 鄯善县| 饶阳县| 拉萨市| 芜湖县| 宝山区| 梅河口市| 湟源县| 电白县| 景东| 丽水市| 夏邑县| 雷州市| 沁阳市| 韶山市|