StorageManager是Android SDK中管理存储设备的一个类。其中的存储设备分内部存储和外部存储,外部存储可以有SDCard、U盘等其他挂载的外设。

StorageVolume代表的是一个设备信息的数据结构,里面包含了名称、路径、挂载状态等等信息。

以前获取设备列表的方法大多是通过反射获getVolumeList()方法获取到StorageVolume[]数组,但是现在发现完全没有必要的,通过getStorageVolumes()方法便可以获取到StorageVolume的集合。只是在取StorageVolume里面的字段的时候,像Path、ID这些属性的get方法是隐藏的,需要使用反射来获取。示例代码如下:

mStorageManager = getSystemService(StorageManager.class);

ListvolumeList = mStorageManager.getStorageVolumes();

for (StorageVolume volume : volumeList) {

if (null != volume && volume.isRemovable()) {

String label = volume.getDescription(this); //这个其实就是U盘的名称

String status = volume.getState(); //设备挂载的状态,如:mounted、unmounted

boolean isEmulated = volume.isEmulated(); //是否是内部存储设备

boolean isRemovable = volume.isRemovable(); //是否是可移除的外部存储设备

String mPath=""; //设备的路径

try {

Class myclass = Class.forName(volume.getClass().getName());

Method getPath = myclass.getDeclaredMethod("getPath",null);

getPath.setAccessible(true);

mPath = (String) getPath.invoke(volume);

Log.i(TAG,"name:"+label);

Log.i(TAG,"status:"+status);

Log.i(TAG,"isEmulated:"+isEmulated);

Log.i(TAG,"isRemovable:"+isRemovable);

Log.i(TAG,"mPath:"+mPath);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}catch (NoSuchMethodException e) {

e.printStackTrace();

}catch (InvocationTargetException e) {

e.printStackTrace();

}catch (IllegalAccessException e) {

e.printStackTrace();

}

}

}

当然,如果U盘通过转换器连接手机,我们可以写一个获取外置U盘存储路径的方法:

public String externalSDCardPath() {

String externalSDCardPath = "";

try {

StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);

// 7.0才有的方法

ListstorageVolumes = storageManager.getStorageVolumes();

Class> volumeClass = Class.forName("android.os.storage.StorageVolume");

Method getPath = volumeClass.getDeclaredMethod("getPath");

Method isRemovable = volumeClass.getDeclaredMethod("isRemovable");

getPath.setAccessible(true);

isRemovable.setAccessible(true);

for (int i = 0; i < storageVolumes.size(); i++) {

StorageVolume storageVolume = storageVolumes.get(i);

String mPath = (String) getPath.invoke(storageVolume);

Boolean isRemove = (Boolean) isRemovable.invoke(storageVolume);

if(isRemove){

externalSDCardPath = mPath;

}

Log.i("tag2", "mPath is === " + mPath + "isRemoveble == " + isRemove);

}

}catch (Exception e){

Log.i("tag2","e == "+e.getMessage());

}

return externalSDCardPath;

}

android storagemanager来获取u盘名称,StorageManager获取U盘挂载状态相关推荐

  1. jq获取id的名称_jquery获取节点名称

    jQuery 的 get(index) 方法允许选择一个实际的 DOM 元素并且对其直接操作,而不是通过 jQuery 函数,尔后可以直接访问 DOM 元素的 tagName 属性.$(this).g ...

  2. python获取模块的名称_python获取当前模块的名称

    摘自web.py框架代码 #!/usr/bin/env python import sys import os def get_module(): def main_module_name(): mo ...

  3. python获取模块的名称_Python获取模块名称

    每个模块都有一个名字,在模块中的语句能够找出它所在的模块的名字.这对于搞清楚模块是否正在运行或被导入这样的特殊用途是很方便的.正如前面提到的,当一个模块被第一次导入时,其所包含的代码被执行.我们可以通 ...

  4. php如何获取常量的值,php – 如何获取常量的名称?

    你可以得到他们与 reflection API 我假设你想根据你的变量的值(变量的值==常量的值)获取常量的名称.获取类中定义的所有常量,循环遍历它们,并将这些常量的值与变量的值进行比较. 注意,使用 ...

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

    在android项目中实现Windos一样的U盘效果,需监听两个U盘的插入和拔出状态,并屏蔽本地存储,使用U盘来下载和上传文件: 在编辑代码中碰到一个问题:无法获取插入U盘的名称,于是通过java的反 ...

  6. android代码获取应用名称,Android获取应用程序名称(ApplicationName)

    MainActivity如下: package cn.testapplicationname; import android.os.Bundle; import android.widget.Text ...

  7. android获取程序名称,Android获取应用程序名称(ApplicationName)示例

    MainActivity如下: 代码如下: package cn.testapplicationname; import android.os.Bundle; import android.widge ...

  8. android 获取程序名,Android_Android获取应用程序名称(ApplicationName)示例,MainActivity如下: 复制代码 代码 - phpStudy...

    Android获取应用程序名称(ApplicationName)示例 MainActivity如下: package cn.testapplicationname; import android.os ...

  9. Android 获取外接储存的设备路径(如挂载的U盘)

    前提介绍:项目中遇到这样一种情况,需要在开机和插入U盘的时候去获取U盘的路径,并读取U盘中的一个文件.其中插入U盘的时候,直接监听U盘挂载广播,可以获取U盘的路径,例如说路径A.但是开机的时候去需要找 ...

最新文章

  1. 归纳几点html编码要素--杜绝浏览器不兼容
  2. java后ping不是内部_ping不是内部或外部命令,也不是可运行的程序解决方案
  3. 手机利用python访问电脑文件_黑客教程,一行python命令让手机读取电脑文件!
  4. JLBH示例1 –为什么应在上下文中对代码进行基准测试
  5. 【从入门到放弃-Java】并发编程-线程安全
  6. linux 查看neihe版本_linux查看系统内核版本号
  7. 世界之窗浏览器怎么隐藏收藏栏
  8. Hexo+GitHub 快速搭建个人博客(二)---- 域名解析
  9. DxO FilmPack 5教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
  10. 厉害了!同事请假参加冬奥会顺手得了铜牌:系知名涂料公司员工
  11. 数据工程师需要掌握的 18 个 Python 库
  12. 使用scp从远程服务器下载文件到本地
  13. plsql导出单表数据
  14. android 蒙版图片带拖动_使用jQuery draggable在div剪切蒙版中拖动缩放图像?
  15. 脚本框架源码,多线程,完美框架,极限多开,随意游戏可套入,端游手游
  16. 北大公开课-计算概论
  17. 激活码方式注册的实现原理述
  18. sqldatasource oracle,asp.net – ORA-01036:非法变量名/号C#(SqlDataSource)Oracle 11g
  19. 数据不满足正态分布,方差齐性怎么办?
  20. 证件照怎么换底色?Excel就能快速搞定,超简单

热门文章

  1. 定制ToolChain for ARM
  2. 倾角传感器的精度和线性误差的区别
  3. 二进制、八进制、十进制、十六进制的英文及简写
  4. iphone 打开safari调试
  5. 第4周收录188起融资,国内物流暴涨,国外40起过亿元大额融资 | 潜在周报
  6. 变种 背包问题_【算法设计】背包问题
  7. 用几段代码搞定Java文件流
  8. Unity 进阶 之 简单模仿鼠标交互(场景:手机屏幕当做触摸板Touch Pad,移动鼠标,鼠标确定等操作)
  9. 生产进度管理系统为制造管理提供较完善的解决方案
  10. vue 基于elementUI、sortablejs的表格拖拽排序