日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState

發(fā)布時間:2024/8/1 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Environment.getExternalStorageDirectory()不可用來判斷內(nèi)、外置存儲

判斷Android系統(tǒng)是內(nèi)置還是外置存儲,使用Environment.getExternalStorageDirectory()
接口是不能判斷出來的,因?yàn)橛械臋C(jī)器上該方法返回的是內(nèi)置存儲路徑。

使用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 }

使用反射調(diào)用getVolumeList()

從getVolumeList源碼可知,該方法為Hide方法,對外不可見,所以需要使用反射調(diào)用。
反射調(diào)用代碼

public static StorageVolume[] getVolumeList(StorageManager storageManager){try {Class clz = StorageManager.class;Method getVolumeList = clz.getMethod("getVolumeList", null);StorageVolume[] result = (StorageVolume[]) getVolumeList.invoke(storageManager, null);return result;} catch (Exception e) {e.printStackTrace();}return null;}

使用反射調(diào)用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 }

反射調(diào)用代碼

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()接口,可以移除的就是外置存儲,不可移除的是內(nèi)置存儲。

總結(jié)

以上是生活随笔為你收集整理的Android 使用反射调用StorageManager中 Hide方法getVolumeList、getVolumeState的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。