android12.0(S) 如何区分U盘和TF卡

简介: android12.0(S) 如何区分U盘和TF卡

一开始没找到合适的方法,后来看到系统通知栏中直接显示了对应类型,

找到对应代码但在普通app中用不了,那只能上反射大法了

public class SDCardUtil{
  private static String TAG = "SDCardUtil";
  public static HashMap getStorageType(Context pContext) {
        HashMap<String,String> map = new HashMap<>();
        map.clear();
    StringBuffer buffer = new StringBuffer();
        final StorageManager storageManager = (StorageManager) pContext.getSystemService(Context.STORAGE_SERVICE);
        try {
            //获取类型是U盘还是SD卡
            final Method getVolumes = storageManager.getClass().getMethod("getVolumes");
            final List<Object> invokeVolumes = (List<Object>) getVolumes.invoke(storageManager);
            final Class<?> volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
            final Method getPath = volumeInfoClazz.getMethod("getPath");
            final Method getDisk = volumeInfoClazz.getMethod("getDisk");
            final Class<?> diskInfoClazz = Class.forName("android.os.storage.DiskInfo");
            final Method getDescription = diskInfoClazz.getMethod("getDescription");
            for (int i = 0; i < invokeVolumes.size(); i++) {
                final Object volumeInfo = invokeVolumes.get(i);
                File invokePath = (File) getPath.invoke(volumeInfo);
                Log.e(TAG, "invokePath:"+invokePath.getPath());
                if ("/data".equals(invokePath.getPath()) || "/storage/emulated".equals(invokePath.getPath())) continue;
                Object invokeDiskInfo = getDisk.invoke(volumeInfo);
                String description = (String)getDescription.invoke(invokeDiskInfo);
                Log.e(TAG, "getDescription:"+description);
                map.put(invokePath.getPath(), description);
            }
        return map;
    }
}
目录
相关文章
|
7月前
|
Java Android开发
Android OTG U盘无法显示在系统文件管理的修改
Android OTG U盘无法显示在系统文件管理的修改
84 0
|
7月前
|
Android开发
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
304 0
|
7月前
|
XML Java Android开发
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
Android App事件交互中区分点击和长按动作以及识别手势滑动方向的讲解及实战(附源码 可直接使用)
524 0
|
测试技术 Android开发
Android实现同时安装测试环境与生产环境包,及区分app名和图标
众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。
491 0
Android实现同时安装测试环境与生产环境包,及区分app名和图标
|
自然语言处理 Java Android开发
【Android 逆向】加壳技术识别 ( 函数抽取 与 Native 化加壳的区分 | VMP 加壳与 Dex2C 加壳的区分 )
【Android 逆向】加壳技术识别 ( 函数抽取 与 Native 化加壳的区分 | VMP 加壳与 Dex2C 加壳的区分 )
438 1
|
Android开发
让Android Studio代码提示不区分大小写的方法
在as的使用过程中,智能提示会区分大小写,对我们快速开发十分不利,不断切换大小写很影响效率,这个时候不区分大小写的优势就出来了,如何设置,直接上图:
184 0