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

首頁 > 系統 > Android > 正文

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

2019-12-12 00:37:35
字體:
來源:轉載
供稿:網友

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

Environment.getExternalStorageDirectory().getAbsolutePath();

通過查看getExternalStorageDirectory源碼發現,Android只是沒有公開的接口獲取而已

 public static File getExternalStorageDirectory() {  throwIfUserRequired();  return sCurrentUser.getExternalDirs()[0]; }

內置sd卡取的sCurrentUser.getExternalDirs()中的第一個值,通過查看StorageManager公有的方法,發下StorageManager@getStorageVolumes也能獲取到所有的StorageVolume,但是通過StorageVolume對象只能調用到一些簡單的方法,發現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; }

竟然沒有公開的接口調用這些方法,那就只能想到反射了,具體實現方式如下:

1、在清掉AndroidManifest.xml文件中添加需要的權限

 <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);  //獲取所有掛載的設備(內部sd卡、外部sd卡、掛載的U盤)  List<StorageVolume> volumes = mStorageManager.getStorageVolumes();  try {   Class<?> storageVolumeClazz = Class     .forName("android.os.storage.StorageVolume");   //通過反射調用系統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        //通過反射調用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盤路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹿泉市| 宽甸| 乌拉特后旗| 肇州县| 上栗县| 太和县| 东乡族自治县| 年辖:市辖区| 仁寿县| 广元市| 永年县| 太和县| 神木县| 遵化市| 周口市| 分宜县| 兴化市| 乐清市| 桦南县| 西藏| 奉节县| 北海市| 尤溪县| 兴和县| 宜川县| 龙岩市| 兴宁市| 普格县| 措勤县| 达日县| 张掖市| 麟游县| 绵阳市| 朝阳县| 馆陶县| 太和县| 额济纳旗| 偃师市| 新野县| 天门市| 横峰县|