Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState
生活随笔
收集整理的這篇文章主要介紹了
Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Environment.getExternalStorageDirectory()不可用來判斷內、外置存儲
判斷Android系統是內置還是外置存儲,使用Environment.getExternalStorageDirectory()
接口是不能判斷出來的,因為有的機器上該方法返回的是內置存儲路徑。
使用android.os.storage.StorageManager的getVolumeList方法
getVolumeList方法源碼如下:
Returns list of all mountable volumes. Hide: 568 569 public StorageVolume[] More ...getVolumeList() { 570 if (mMountService == null) return new StorageVolume[0]; 571 try { 572 Parcelable[] list = mMountService.getVolumeList(); 573 if (list == null) return new StorageVolume[0]; 574 int length = list.length; 575 StorageVolume[] result = new StorageVolume[length]; 576 for (int i = 0; i < length; i++) { 577 result[i] = (StorageVolume)list[i]; 578 } 579 return result; 580 } catch (RemoteException e) { 581 Log.e(TAG, "Failed to get volume list", e); 582 return null; 583 } 584 }使用反射調用getVolumeList()
從getVolumeList源碼可知,該方法為Hide方法,對外不可見,所以需要使用反射調用。
反射調用代碼
使用反射調用getVolumeState()
getVolumeState()源碼如下:
Gets the state of a volume via its mountpoint. Hide: 554 555 public String More ...getVolumeState(String mountPoint) { 556 if (mMountService == null) return Environment.MEDIA_REMOVED; 557 try { 558 return mMountService.getVolumeState(mountPoint); 559 } catch (RemoteException e) { 560 Log.e(TAG, "Failed to get volume state", e); 561 return null; 562 } 563 }反射調用代碼
public static String getVolumeState(StorageManager storageManager, String path){String result = "";if(null == storageManager || TextUtils.isEmpty(path)){return result;}try {Class clz = StorageManager.class;Method getVolumeList = clz.getMethod("getVolumeState", String.class);result = (String) getVolumeList.invoke(storageManager, path);} catch (Exception e) {e.printStackTrace();}return result;}StorageVolume這個類中提供了一個isRemovable()接口,可以移除的就是外置存儲,不可移除的是內置存儲。
總結
以上是生活随笔為你收集整理的Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把ts自动合并 下载网页视频并自动合成视
- 下一篇: 主板检测卡c5_主板检测卡上的05.00