Android 6.0上sdcard和U盘路径获取和区分方法

 更新时间:2018年08月02日 09:28:25   作者:JulyAnRef  
今天小编就为大家分享一篇Android 6.0上sdcard和U盘路径获取和区分方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Android6.0上会根据卡的种类和卡的挂载状态来动态生成挂载路径,所以之前写固定路径的办法不可用,最后通过网上查找和分析android源码,通过反射获取到路径,并且进行了正确区分,代码如下:

/**
  * 6.0获取外置sdcard和U盘路径,并区分
  * @param mContext
  * @param keyword SD = "内部存储"; EXT = "SD卡"; USB = "U盘"
  * @return
  */
 public static String getStoragePath(Context mContext,String keyword) {
  String targetpath = "";
  StorageManager mStorageManager = (StorageManager) mContext
    .getSystemService(Context.STORAGE_SERVICE);
  Class<?> storageVolumeClazz = null;
  try {
   storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
   
   Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
   
   Method getPath = storageVolumeClazz.getMethod("getPath");
     
   Object result = getVolumeList.invoke(mStorageManager);
   
   final int length = Array.getLength(result);
   
   Method getUserLabel = storageVolumeClazz.getMethod("getUserLabel");
   
   
   for (int i = 0; i < length; i++) {
    
    Object storageVolumeElement = Array.get(result, i);
    
    String userLabel = (String) getUserLabel.invoke(storageVolumeElement);
    
    String path = (String) getPath.invoke(storageVolumeElement);
    
    if(userLabel.contains(keyword)){
     targetpath = path;
    }

   }
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (InvocationTargetException e) {
   e.printStackTrace();
  } catch (NoSuchMethodException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  }
  return targetpath ;
 }

这里拿到的userLabel就是系统给每个盘的一个label,用来区分是内部存储、sdcard还是U盘,内卡的label固定,但是sdcard和U盘的label是根据种类,状态等信息等动态生成,所以这里“if(userLabel.contains(keyword)){”没有用equals。

总结:不懂看源码

以上这篇Android 6.0上sdcard和U盘路径获取和区分方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Android自定义通用标题栏CustomTitleBar

    Android自定义通用标题栏CustomTitleBar

    这篇文章主要为大家详细介绍了Android自定义通用标题栏CustomTitleBar,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android 中使用ContentObserver模式获取短信用正则自动填充验证码

    Android 中使用ContentObserver模式获取短信用正则自动填充验证码

    这篇文章主要介绍了Android 中使用ContentObserver模式获取短信用正则自动填充验证码,首先使用了ContentObserver监听短信,然后从短信中用正则的分组去拿到验证码,具体实现代码大家参考下本文
    2017-02-02
  • Android实现支付宝手势密码功能

    Android实现支付宝手势密码功能

    这篇文章主要为大家详细介绍了Android实现支付宝手势密码功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android自定义ListView实现下拉刷新

    Android自定义ListView实现下拉刷新

    这篇文章主要为大家详细介绍了Android自定义ListView实现下拉刷新的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android EasyBarrage实现轻量级弹幕效果

    Android EasyBarrage实现轻量级弹幕效果

    本篇文章主要介绍了Android EasyBarrage实现轻量级弹幕效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 获取android4.0版本sdcard路径示例

    获取android4.0版本sdcard路径示例

    自从android4.0开始,谷歌为没有内存卡的手机模拟了一个SD卡,占用了原来的SD卡路径,并为真实的sd卡挂载到该目录的子目录,由于所挂载的目录并没有官方规范,所以命名会不同,只能通过搜索,下面是获取android4.0版本sdcard路径示例
    2014-03-03
  • Android6.0 storage目录sd卡存储的路径创建详解

    Android6.0 storage目录sd卡存储的路径创建详解

    这篇文章主要介绍了Android6.0 storage目录sd卡存储的路径创建的相关资料,需要的朋友可以参考下
    2017-01-01
  • Android手机开发设计之记事本功能

    Android手机开发设计之记事本功能

    这篇文章主要为大家详细介绍了Android手机开发设计之记事本功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android集成zxing扫码框架功能

    Android集成zxing扫码框架功能

    这篇文章主要介绍了Android集成zxing扫码框架功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • android中圆角图像生成方法

    android中圆角图像生成方法

    这篇文章主要介绍了android中圆角图像生成方法,涉及Android处理圆角图像的技巧,需要的朋友可以参考下
    2015-04-04

最新评论