在做物联网客户需求时,有客户要求实现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设备。

更多相关文章

  1. adb安装配置及连接手机
  2. Android(安卓)Scroll详解(三):Android(安卓)绘制过程详解
  3. Java代理模式与Android的情结
  4. Android事件分派机制
  5. 【工利其器】必会工具之(四)Refactor篇——Android(安卓)Studio在
  6. 【转】eclipse 上调试android的自带应用方法
  7. 如何获得Android设备名称(ADB命令详细介绍)
  8. 通过ADB命令行卸载或删除你的Android设备中的应用
  9. Unity3D游戏开发之Unity与Android交互调用研究

随机推荐

  1. android版本更新说明
  2. Android(安卓)热修复框架: Sophix基本使
  3. android canvas drawText \r\n 换行
  4. android之app widget(三)
  5. 如何动态的设置Relative Layout中按钮的l
  6. Android(安卓)NDK之二:创建NativeActivity
  7. Android中的小技巧
  8. android Api Demos
  9. [Android] Handler源码解析 (Java层)
  10. adb命令执行java代码