一、默认是做为adb 调试功能,实际测试修改persist.sys.usb.config 是没有用。
二、拔插usb设备默认的选项是No data transfer
三、按下面的修改就可以修改默认usb连接模式为MTP。
四、整个过程修改的内容。
project device/rockchip/common/
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 7223d8c..38cda02 100755
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -204,6 +204,11 @@ TARGET_RECOVERY_DEFAULT_ROTATION ?= ROTATION_RIGHT
# For Surface Flinger Rotation
SF_PRIMARY_DISPLAY_ORIENTATION ?= 0
+ifeq ($(strip $(USB_FUNCTION_DEFAULT_MTP)), true)
+PRODUCT_PROPERTY_OVERRIDES += persist.sys.usb.mtp=true
+$(warning usb port function is used as MTP(Media Transfer Protocol) by deafult)
+endif
+
#Screen to Double, Single
#YES: Screen to Double
#NO: Screen to single
diff --git a/sepolicy/private/property_contexts b/sepolicy/private/property_contexts
old mode 100644
new mode 100755
index 8e00910..e7bad0c
--- a/sepolicy/private/property_contexts
+++ b/sepolicy/private/property_contexts
@@ -43,6 +43,7 @@ debug.hwui.renderer u:object_r:vendor_system_public_prop:s0
sys.all.modules.ready u:object_r:vendor_system_public_prop:s0
#vendor-init-settable|public-readable
persist.sys.usb.config u:object_r:debug_prop:s0 exact string
+persist.sys.usb.mtp u:object_r:debug_prop:s0
ro.target.product u:object_r:debug_prop:s0 exact string
persist.sys.first_booting u:object_r:debug_prop:s0
drm.service. u:object_r:debug_prop:s0
project frameworks/base/
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 31efdc7..0261b92 100755
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -821,7 +821,10 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
setScreenUnlockedFunctions();
} else {
- setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
+ if(SystemProperties.getBoolean("persist.sys.usb.mtp", false))
+ setEnabledFunctions(UsbManager.FUNCTION_MTP, false);
+ else
+ setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
}
}
updateUsbFunctions();
@@ -1011,7 +1014,10 @@ public class UsbDeviceManager implements ActivityTaskManagerInternal.ScreenObser
&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
setScreenUnlockedFunctions();
} else {
- setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
+ if(SystemProperties.getBoolean("persist.sys.usb.mtp", false))
+ setEnabledFunctions(UsbManager.FUNCTION_MTP, false);
+ else
+ setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
}
if (mCurrentAccessory != null) {
mUsbDeviceManager.getCurrentSettings().accessoryAttached(mCurrentAccessory);
五、测试结果,电脑连接android设备的时候,PC可以读取设备里面的内容,adb 功能照样可以使用。
六、frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java里面处理OTG口usb设备拔插侦听,发送各种广播。
七、参考文章