android user版本默认usb模式为充电模式
android插入usb时会切换至默认设置的模式,debug版本为adb,user版本为mtp
protected long getChargingFunctions() {
// if ADB is enabled, reset functions to ADB
// else enable MTP as usual.
if (isAdbEnabled()) {
return UsbManager.FUNCTION_ADB;
} else {
return UsbManager.FUNCTION_MTP;
}
}
一般客户会需要user和debug版本的状态保持一致,即同时为mtp或者同时为充电(none)。
默认为mtp模式网上资源很多,不作赘述。
默认为充电模式如果按照同样的方式修改后,虽然插入usb后确实不会弹出mtp,但是在设置中-连接的设备将无法显示usb切换选项。
本文通过mtpservice的角度,将默认usb模式设置为充电时可以在设置中正常显示usb切换菜单。
项目makefile添加区分属性
+ifeq ($(TARGET_BUILD_VARIANT),user)
+PRODUCT_SYSTEM_PROPERTIES += ro.usb.default_mtp=false
+endif
Index: packages/services/Mtp/src/com/android/mtp/MtpReceiver.java
===================================================================
--- packages/services/Mtp/src/com/android/mtp/MtpReceiver.java (版本 535)
+++ packages/services/Mtp/src/com/android/mtp/MtpReceiver.java (版本 536)
@@ -23,6 +23,7 @@
import android.content.IntentFilter;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.Log;
@@ -71,6 +72,10 @@
if (configured && (mtpEnabled || ptpEnabled)) {
if (!isCurrentUser)
return;
+ if (!unlocked && !SystemProperties.getBoolean("ro.usb.default_mtp", true))
+ return;
intent = new Intent(context, MtpService.class);
intent.putExtra(UsbManager.USB_DATA_UNLOCKED, unlocked);
if (ptpEnabled) {
如果没有实际进入存储模式,则不进入mtp模式。