您好,登錄后才能下訂單哦!
在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盤路徑的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。