/**
* 此方法 应该 !! 适用于Android6.0以及以上的系统
* 因为Android6.0以下的系统并没有DiskInfo.java这个类(我只在8.1上试验过,查看过5.1,6.0,7.1等源码是否有DiskInfo这个
* 类)如果此方法不行的话请评论告知,谢谢
* Android6.0以下的方式之后补充研究吧
* 以下部分代码只做研究用途并没有实际调用,可以删除,另外还可以通过这种反射的方式获取到存储设备的大小等等的信息
*/
fun getDiskInfo(context: Context):List<String> {
var paths = ArrayList<String>()
try {
val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager
val storageManagerClazz = Class.forName("android.os.storage.StorageManager")//反射取到StorageManager
val getVolumesMethod = storageManagerClazz.getMethod("getVolumes")
val volumeInfos = getVolumesMethod.invoke(storageManager) as List<*> //获取到了VolumeInfo的列表
val volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo")//反射取到VolumeInfo
val getTypeMethod = volumeInfoClazz.getMethod("getType")//获取设备类型的方法
val getFsUuidMethod = volumeInfoClazz.getMethod("getFsUuid")//获取设备uuid的方法
val getDisk = volumeInfoClazz.getMethod("getDisk") //获取Disk对象的方法
val fsTypeField:Field = volumeInfoClazz.getDeclaredField("fsType")
val fsLabelField: Field = volumeInfoClazz.getDeclaredField("fsLabel")
val pathField: Field = volumeInfoClazz.getDeclaredField("path")
val internalPath: Field = volumeInfoClazz.getDeclaredField("internalPath")
val diskInfoClazz = Class.forName("android.os.storage.DiskInfo")//反射取到DiskInfo
val flagsField:Field = diskInfoClazz.getDeclaredField("flags") //获取到diskInfo中的flags
val isSdMethod = diskInfoClazz.getMethod("isSd") //判断此disk是否是sd卡类型
val isUsbMethod = diskInfoClazz.getMethod("isUsb") //判断此disk是否是USB卡类型
if (volumeInfos != null) {
for (volumeInfo in volumeInfos) {
val uuid = getFsUuidMethod.invoke(volumeInfo)
if(uuid != null) {
val path = pathField.get(volumeInfo) as String
paths.add(path)
val disk = getDisk.invoke(volumeInfo)
val flags = flagsField.get(disk) as Int
val isSd = isSdMethod.invoke(disk) as Boolean
val isUsb = isUsbMethod.invoke(disk) as Boolean
Log.e("zhang", "getDiskInfo: ===> path:$path flags:$flags isSd:$isSd isUsb:$isUsb")
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
return paths
}
通过反射获取挂载的存储设备的路径并判断设备的类型(SD,USB)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...