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模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值