android6.0获取OTG

僤鯓⒐⒋嵵緔 提交于 2019-12-05 18:34:45

最近项目中遇到了获取android OTG 路径安装以前的方法无法获取的问题,原来在android6.0已经改变了外置sd卡和u盘的挂载方式,改为自动挂载,所以之前的方法是无法获取的了。
通过查看系统设置中的存储项,该项可以显示usb存储必然有方法获取OTG路径,经查看源码,得出了获取路径的大概思路和方法。很遗憾的是没有能全部弄明白,不过能解决项目需求就好了。以下就是用来获取android6.0的外置usb路径的方法:


        StorageManager mStorageManager;
          String usbPath = null;
        mStorageManager = context.getSystemService(StorageManager.class);
        List<VolumeInfo> volumes = mStorageManager.getVolumes();
        for (VolumeInfo vol : volumes) {
            if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
            //6.0中外置sd和usb标示为公共的
                File usbFile = vol.getPath();
                if (usbFile!=null) {
                    usbPath = usbFile.getAbsolutePath();
                }

            }
        }

这样的方法是有弊端,因为这样子会无法区分外置sd和U盘,不过对于没有外置sd卡的设备来说就够。
对于区分sd卡和u盘:通过百度和查看了VolumeInfo 的源码找到了解决的办法。
百度相关资料:android6.0获取外置sd卡
这片文件中有一个问题就是:VolumeInfo .getpath()这个方法通过查看源码发现是返回类型是File类并不是path,所以路径应该这样获取:

         for (VolumeInfo vol : volumes) {
            if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
            //6.0中外置sd和usb标示为公共的
            if(vol.getDisk() != null &&vol.getDisk().isUsb()) 
             {    File usbFile = vol.getPath();
                if (usbFile!=null) {
                    usbPath = usbFile.getAbsolutePath();
                }
             }              
            }
            }

由于现在手上没有设备,这个改进后的方法没有测试改,这只是理论上应该可以,希望有人能测试后能给出个答案,谢谢
哦,对了VolumeInfo 要引进这个import android.os.storage.VolumeInfo;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!