欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android N獲取外置SD卡或掛載U盤(pán)路徑的方法

 更新時(shí)間:2018年08月02日 09:20:31   作者:yin1031468524  
今天小編就為大家分享一篇Android N獲取外置SD卡或掛載U盤(pán)路徑的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

在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)文章

最新評(píng)論