Android6.0 usb默认MTP模式的修改方法

Android6.0 usb默认MTP模式的修改方法

在6.0以前的系统 只需要修改默认的 persist.sys.usb.config 的值就可以了,

但是6.0,无论你怎能修改persist.sys.usb.config的默认值,usb默认是仅充电模式。就算你修改了设置,拔掉后再连接也是仅充电模式。

一切问题的原因都是可以再源代码里找到线索的。
源代码
packages/apps/Settings/src/com/android/settings/deviceinfo/UsbBackend.java

public UsbBackend(Context context) {
        Intent intent = context.registerReceiver(null,
                new IntentFilter(UsbManager.ACTION_USB_STATE));
        mIsUnlocked = intent.getBooleanExtra(UsbManager.USB_DATA_UNLOCKED, false);

        …………………
    }
     public int getUsbDataMode() {
        if (!mIsUnlocked) {
            return MODE_DATA_NONE;
        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) {
            return MODE_DATA_MTP;
        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_PTP)) {
            return MODE_DATA_PTP;
        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MIDI)) {
            return MODE_DATA_MIDI;
        /// M: Add for Built-in CD-ROM and USB Mass Storage @{
        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MASS_STORAGE)) {
            return MODE_DATA_MASS_STORAGE;
        } else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_BICR)) {
            return MODE_DATA_BICR;
        /// M: @}
        }
        return MODE_DATA_NONE; // ...
    }

从上面的代码可以看到 Android 6.0 新增了一个重要的东西—-mIsUnlocked
只要 mIsUnlocked 是false 什么模式也不会起作用,这就是原因,那么mIsUnlocked的值是谁控制的呢,继续分析代码。
我们很容易就发现了原因。
frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java

public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_UPDATE_STATE:
                    mConnected = (msg.arg1 == 1);
                    mConfigured = (msg.arg2 == 1);
                    mUsbConfigured = mConfigured;
                    if (!mConnected) {
                        // When a disconnect occurs, relock access to sensitive user data
                        mUsbDataUnlocked = false;
                    } else {
                        mUsbDataUnlocked = true; //subingxi add 这是我加的
                    }
                    updateUsbNotification();
                    updateAdbNotification();
                    if (UsbManager.containsFunction(mCurrentFunctions,
                            UsbManager.USB_FUNCTION_ACCESSORY)) {
                        updateCurrentAccessory();
                    } else if (!mConnected) {
                        // restore defaults when USB is disconnected
                        setEnabledFunctions(null, false);
                    }
                    if (mBootCompleted) {
                        updateUsbStateBroadcast();
                        updateUsbFunctions();
                    }

                    // C2K-BYPASS-START
                    if (bEvdoDtViaSupport == true) {
                        if (!mConnected) {
                            //set bypass mode to 0
                            mBypass.updateBypassMode(0);
                        }
                    }
                    // C2K-BYPASS-END
                    break;

这里就很容易看到原因了,只要usb断开连接 mUsbDataUnlocked 就会变成 false,然后你只有你只有手动到通知栏里修改usb模式后,这个mUsbDataUnlocked才会变成true,我的修改很简单,usb连接上的时候就让mUsbDataUnlocked变成true,这样你设置的模式就会生效了,就这样简单。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值