91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-01 09:47:17 來源:腳本之家 閱讀:328 作者:yin1031468524 欄目:移動開發

在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盤路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南京市| 姜堰市| 驻马店市| 平和县| 红河县| 金平| 汾西县| 盱眙县| 平昌县| 和顺县| 康定县| 吉安县| 虞城县| 新民市| 井陉县| 西乌珠穆沁旗| 瑞金市| 井冈山市| 通州区| 宜君县| 南平市| 乌苏市| 华坪县| 建德市| 昂仁县| 讷河市| 铜鼓县| 渭南市| 乾安县| 鲁山县| 德阳市| 太仆寺旗| 米易县| 板桥市| 大同县| 荥阳市| 济源市| 佛山市| 新安县| 南汇区| 盱眙县|