最近项目中遇到了获取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;
来源:CSDN
作者:baidu_35578313
链接:https://blog.csdn.net/baidu_35578313/article/details/51886543