最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲得所有存儲設(shè)備位置的最佳方法

 更新時間:2018年08月01日 11:21:54   作者:徒步青云  
今天小編就為大家分享一篇Android獲得所有存儲設(shè)備位置的最佳方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

本方式可以獲得內(nèi)部存儲設(shè)備地址、SD卡地址、USB設(shè)備地址,兼容性能達(dá)到99%(別問我為什么這么保證,因為是借鑒了Android設(shè)置->存儲頁面的源碼)。

由于調(diào)用了幾個被@hide的方法,所以采用了反射。

具體代碼如下:

public static List<HomeDirBean> getAllExternalStorage(Context context) {
  List<HomeDirBean> storagePath = new ArrayList<>();
  StorageManager storageManager = (StorageManager) context.getSystemService(STORAGE_SERVICE);
  StorageVolume[] storageVolumes;
  try {
   Method getVolumeList = StorageManager.class.getDeclaredMethod("getVolumeList");
   storageVolumes = (StorageVolume[]) getVolumeList.invoke(storageManager);
   Method getVolumeState = StorageManager.class.getDeclaredMethod("getVolumeState", String.class);
   for (StorageVolume storageVolume : storageVolumes) {
    String desc = storageVolume.getDescription(context);
    Log.i(TAG, "storageVolume name--->" + desc);
    Method getPath = StorageVolume.class.getMethod("getPath");
    String path = (String) getPath.invoke(storageVolume);
    Log.i(TAG, "StoragePath--->" + path);
    //這里需要用StorageManager反射調(diào)用getVolumeState函數(shù),而不應(yīng)該用StorageVolume的getState方法,因為可能會報錯
    String state = (String) getVolumeState.invoke(storageManager, path);
    Log.i(TAG, "storageVolume State--->" + state);
    if (Environment.MEDIA_MOUNTED.equals(state)) {
     HomeDirBean bean = new HomeDirBean(path, desc);
     storagePath.add(bean);
    }
   }
  } catch (Exception e) {
   Log.e(TAG, e.getMessage());
  }
  return storagePath;
 }

這里需要注意,可能有小伙伴會問,既然StorageVolume類有g(shù)etState方法,為啥還要用StorageManager反射調(diào)用getVolumeState方法,并傳入path地址,而在源碼里,StorageManager的getVolumeState的方法的實現(xiàn),也是將path重新創(chuàng)建為StorageVolume類,然后再調(diào)用其getState方法,我們這樣做成這不是多此一舉嗎?

源碼截圖如下:

答案當(dāng)然不是了,不然我也不會放棄性能去反射那個方法去裝這個逼了。主要原因是@hide的這個方法里,mountPoint被重新打包成StorageVolume時,這相當(dāng)于系統(tǒng)去創(chuàng)建的一個StorageVolume實例,自然可以執(zhí)行它的所有方法。而如果是應(yīng)用直接調(diào)用,在被打包時,很多方法被隱藏了,比如這個getState方法,這時候應(yīng)用就會報錯,找不到該方法。

先簡單寫到這,以后有補(bǔ)充再添加。

以上這篇Android獲得所有存儲設(shè)備位置的最佳方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android編程實現(xiàn)實時監(jiān)聽EditText文本輸入的方法

    Android編程實現(xiàn)實時監(jiān)聽EditText文本輸入的方法

    這篇文章主要介紹了Android編程實現(xiàn)實時監(jiān)聽EditText文本輸入的方法,結(jié)合實例形式分析了EditText控件及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Android五子棋游戲程序完整實例分析

    Android五子棋游戲程序完整實例分析

    這篇文章主要為大家分享了Android五子棋游戲程序完整實例,內(nèi)容豐富,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android實現(xiàn)局部圖片滑動指引效果示例

    Android實現(xiàn)局部圖片滑動指引效果示例

    現(xiàn)在滑動效果用的比較多,尤其是在手機(jī)端上面,本文介紹了Android實現(xiàn)局部圖片滑動指引效果示例,現(xiàn)在就分享給大家,也給大家做個參考。
    2016-10-10
  • android上一個可追蹤代碼具體到函數(shù)某行的日志類

    android上一個可追蹤代碼具體到函數(shù)某行的日志類

    追蹤代碼到函數(shù)具體某行,這樣的功能,是每一個程序員都希望會有的,因為它可以幫助我們追蹤到某行代碼的錯誤,接下來介紹下android上一個可追蹤代碼到函數(shù)具體某行的日志類,希望對開發(fā)者有所幫助
    2012-12-12
  • Kotlin構(gòu)造函數(shù)與成員變量和init代碼塊執(zhí)行順序詳細(xì)講解

    Kotlin構(gòu)造函數(shù)與成員變量和init代碼塊執(zhí)行順序詳細(xì)講解

    這篇文章主要介紹了Kotlin構(gòu)造函數(shù)與成員變量和init代碼塊執(zhí)行順序,kotlin里面的構(gòu)造函數(shù)分為主構(gòu)造函數(shù)和次構(gòu)造函數(shù)。主構(gòu)造函數(shù)只能有一個,次構(gòu)造函數(shù)個數(shù)不限制,可以有一個或者多個
    2022-11-11
  • 源碼淺析Android中內(nèi)存泄漏檢測工具Leakcanary的使用

    源碼淺析Android中內(nèi)存泄漏檢測工具Leakcanary的使用

    大名鼎鼎的 Leakcanary 想必作為 Android 開發(fā)都多多少少接觸過,新版本的 Leakcanary 也用 Kotlin 重寫了一遍,最近詳細(xì)查看了下源碼,就來和大家簡單分享一下
    2023-04-04
  • pp列表之分組ListView詳解

    pp列表之分組ListView詳解

    本篇文章是對Android中的ListView進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Android Studio3.0.1填坑筆記

    Android Studio3.0.1填坑筆記

    IntelliJ IDEA 功能強(qiáng)大,是Jet Brains 公司開發(fā)商業(yè)IDE(集成開發(fā)環(huán)境),同時支持Java, Scala 和Groovy。下面小編給大家?guī)砹薃ndroid Studio3.0.1填坑筆記,需要的朋友一起看看吧
    2018-01-01
  • Android使用Notification實現(xiàn)通知功能

    Android使用Notification實現(xiàn)通知功能

    這篇文章主要為大家詳細(xì)介紹了Android使用Notification實現(xiàn)通知功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Android?使用flow實現(xiàn)倒計時的方式

    Android?使用flow實現(xiàn)倒計時的方式

    這篇文章主要介紹了Android?使用flow實現(xiàn)倒計時的方式,借助Flow這個工具,更加優(yōu)雅地實現(xiàn)這個需求功能,文末給大家整理了Android?實現(xiàn)倒計時的幾種方式,需要的朋友可以參考下
    2022-04-04

最新評論

阳山县| 什邡市| 华阴市| 株洲县| 嵩明县| 婺源县| 郴州市| 广安市| 浦县| 辽中县| 天津市| 满洲里市| 卓资县| 临城县| 大城县| 新乐市| 金堂县| 公主岭市| 延寿县| 越西县| 逊克县| 溆浦县| 德江县| 香河县| 河池市| 都昌县| 鄂温| 洮南市| 松滋市| 思茅市| 彰化市| 徐汇区| 永仁县| 喀什市| 敦化市| 永定县| 罗平县| 安龙县| 华宁县| 宾川县| 色达县|