Android U盘文件显示在文件管理器

在做物联网客户需求时,有客户要求实现u盘中的文件在文件管理器中显示,便于客户管理。
查看代码后,发现u盘是基于usb-otg挂载的,只要实现usb-otg文件显示在文件管理器中即可。
android 6.0后usb otg设备不显示在文件管理器中

原因是android对usb otg设备做了一些限制。

可以在settings - storage 中去访问得到。 但是对于很多用户反馈操作很不便。.

可以做如下修改:

framework mountservice.java中,onVolumeCreatedLocked方法中,

//if (vol.disk.isAdoptable() || vol.isPhoneStorage()) {
if (vol.disk.isAdoptable() || vol.isPhoneStorage()||vol.isUSBOTG()) {
vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE;
}

把usb otg设备volumeinfo 设置成visable 。

android 8.0 中将MountService类更改为StorageManagerService,并移除了DiskInfo中判断是否是手机存储和是否为USBOTG存储的方法。
8.0以前在frameworks/base/services/core/java/android/os/storage/DiskInfo.java中添加判断是否是手机存储的方法:isPhoneStorage:

public static boolean isPhoneStorage(String diskId) {
boolean result = false;
if (diskId != null) {
boolean isEMMCProject = SystemProperties.get(“ro.mtk_emmc_support”).equals(“1”);
if (isEMMCProject) {
if (diskId.equals(“disk:179,0”)) {
result = true;
}
} else {
if (diskId.equals(“disk:7,1”)) {
result = true;
}
}
}
return result;
}
在frameworks/base/core/java/android/os/storage/VolumeInfo.java中添加对USBOTG的判断,并调用DiskInfo中的isPhoneStorage方法:

public boolean isUSBOTG() {
String diskID = getDiskId();
if (diskID != null) {
// for usb otg, the disk id same as disk:8:x
String[] idSplit = diskID.split("?;
if (idSplit != null && idSplit.length == 2) {
if (idSplit[1].startsWith(“8,”)) {
Log.d(“chengqian”, “this is a usb otg”);
return true;
}
}
}
return false;
}

/**

  • check if this volume is phone storage
  • eMMC storage diskid is “disk:179,0”
  • NAND storage diskid is “disk:7,1”
    */
    public boolean isPhoneStorage() {
    return DiskInfo.isPhoneStorage(getDiskId());
    }
    在frameworks/base/services/core/java/com/android/server/StorageManagerService.java中的onVolumeCreatedLocked方法中:

//if(vol.dis.isAdoptable()){
if (vol.disk.isAdoptable()||vol.isPhoneStorage()||vol.isUSBOTG()) {
vol.mountFlags |= VolumeInfo.MOUNT_FLAG_VISIBLE;
Log.d(“chengqian”,“otg setting visible”);
}
将USB OTG 设备volumeinfo 设置成visable。
目前android O平台的DsikInfo中提供了isUsb方法,添加判断到StorageManagerService中isAdoptable中即可在文件管理器中查看USBOTG设备。

你可能感兴趣的:(Android)