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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android中通过java的反射机制获取U盘名称

發布時間:2024/1/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android中通过java的反射机制获取U盘名称 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在android項目中實現Windos一樣的U盤效果,需監聽兩個U盤的插入和拔出狀態,并屏蔽本地存儲,使用U盤來下載和上傳文件;
在編輯代碼中碰到一個問題:無法獲取插入U盤的名稱,于是通過java的反射機制來調用源碼的API獲取,方法如下:

private void checkUdisk(){//udisk_insert = false;Class volumeInfoClazz = null;Method getVolumes = null;Method getPath = null;Method getUserLabel = null;Object[] volumes = null;try {volumeInfoClazz = Class.forName("android.os.storage.StorageVolume");getVolumes = StorageManager.class.getMethod("getVolumeList");getPath = volumeInfoClazz.getMethod("getPath");getUserLabel = volumeInfoClazz.getMethod("getUserLabel");volumes = (Object[])getVolumes.invoke(mStorageManager);for (Object vol : volumes) {String path = (String) getPath.invoke(vol);if (path.indexOf("udisk0")!=-1){String userLabel = (String) getUserLabel.invoke(vol); // if (userLabel!=null){ // myApplication.setUserLabel0(userLabel); // udisk_insert = true; // }else { // myApplication.setUserLabel0(null); // }}else if (path.indexOf("udisk1")!=-1){String userLabel = (String) getUserLabel.invoke(vol); // if (userLabel!=null){ // myApplication.setUserLabel1(userLabel); // udisk_insert = true; // }else { // myApplication.setUserLabel1(null); // }}} // if (udisk_insert){ // handler_UD.sendEmptyMessage(0); // }else { // myApplication.setUserLabel0(null); // myApplication.setUserLabel1(null); // handler_UD.sendEmptyMessage(1); // }}catch (Exception ex) {ex.printStackTrace();}}

在上面的方法中
volumeInfoClazz = Class.forName("android.os.storage.StorageVolume");
首先通過反射獲取StorageVolume類

getVolumes = StorageManager.class.getMethod("getVolumeList");

然后獲取類中的**getVolumeLis**t方法

getPath = volumeInfoClazz.getMethod("getPath");getUserLabel = volumeInfoClazz.getMethod("getUserLabel");

獲取U盤路徑和U盤真實名稱的方法

volumes = (Object[])getVolumes.invoke(mStorageManager);

獲取數組對象

String path = (String) getPath.invoke(vol);

獲取路徑
android中U盤的閃存路徑為storage/udisk0和storage/udisk1所以在代碼中取出包括關鍵字的對象對應的userLabel也就是U盤名稱

注意事項:
使用的SDK源碼版本不同,會導致方法名不相同,上述方法中使用的是定制源碼,直接復制代碼會導致報錯,使用改方法時,去對應的android\os目錄下找到相應的類,和其中的方法,然后在代碼中通過反射使用。

總結

以上是生活随笔為你收集整理的android中通过java的反射机制获取U盘名称的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。