我们将Android5.1设备与PC(计算机/电脑)连接时,USB计算机连接方式有:USB 存储设备、媒体设备(MTP)、相机(PTP)、只充电。比如,我要使用 “USB存储设备” 这个USB连接方式:
那么,状态栏会弹出,“已连接USB” 的通知,并且你可以点击进去,打开USB存储设备:
将Android设备与PC连接设置为 “USB存储设备” 模式,就是将Android设备的内部存储器挂载到PC,当做U盘使用。
---------------------------------------------分割线--------------------------------------------
现在在我们的工业平板上遇到状态栏不弹出“已连接USB”,那么就不能打开USB存储设备:
虽然,不使用“USB存储设备” 模式作为Android设备与PC连接方式,“媒体设备(MTP)”模式也可以在Android与PC之间进行数据传输;但是,有时候应用程序需要使用“USB存储设备”这个模式,APP新建的文件/文件夹可以实时更新到PC,其他模式却不行。因此,需要“USB存储设备” 模式能够正常使用!
排查问题过程:
1. 查找关键字
通过查找关键字“已连接USB”,追踪到frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java文件。在updateUsbMassStorageNotification方法中,通过打印日志发现 available 和 isStorageCanShared 值为false,导致“已连接USB”通知弹不出来!
2. 文件对比
available 和 isStorageCanShared 值 与 volumes.getPath() 和 mStorageManager.getVolumeState(path); 相关,通过对比能够正常使用“USB存储设备”的StorageNotification.java文件,StorageNotification.java没有异常。

那么,状态栏会弹出,“已连接USB” 的通知,并且你可以点击进去,打开USB存储设备:


将Android设备与PC连接设置为 “USB存储设备” 模式,就是将Android设备的内部存储器挂载到PC,当做U盘使用。
---------------------------------------------分割线--------------------------------------------
现在在我们的工业平板上遇到状态栏不弹出“已连接USB”,那么就不能打开USB存储设备:

虽然,不使用“USB存储设备” 模式作为Android设备与PC连接方式,“媒体设备(MTP)”模式也可以在Android与PC之间进行数据传输;但是,有时候应用程序需要使用“USB存储设备”这个模式,APP新建的文件/文件夹可以实时更新到PC,其他模式却不行。因此,需要“USB存储设备” 模式能够正常使用!
排查问题过程:
1. 查找关键字
通过查找关键字“已连接USB”,追踪到frameworks/base/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java文件。在updateUsbMassStorageNotification方法中,通过打印日志发现 available 和 isStorageCanShared 值为false,导致“已连接USB”通知弹不出来!
2. 文件对比
available 和 isStorageCanShared 值 与 volumes.getPath() 和 mStorageManager.getVolumeState(path); 相关,通过对比能够正常使用“USB存储设备”的StorageNotification.java文件,StorageNotification.java没有异常。
- /**
- * Update the state of the USB mass storage notification
- */
- void updateUsbMassStorageNotification(boolean available) {
- boolean isStorageCanShared = isAbleToShare();
- Slog.d(TAG, "updateUsbMassStorageNotification - isStorageCanShared=" + isStorageCanShared + ",available=" + available);
- if( !mStorageManager.isUsbMassStorageEnabled() || mLastState.eq