Android Framework 常见解决方案(14)修改默认usb连接模式为MTP模式

114 篇文章 93 订阅

1 原理

Android P Q:找到UsbDeviceManager,这里在finishBoot(也就是启动后) 设置usb模式为 MTP模式,同时在处理消息时如果为默认模式NONE则将其更改为MTP模式。

2 修改方案(Android P Q)

修改文件为:frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java,修改内容为:

//...
    //1 消息处理部分
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case MSG_UPDATE_STATE:
                mConnected = (msg.arg1 == 1);
                mConfigured = (msg.arg2 == 1);
                updateUsbNotification(false);
                updateAdbNotification(false);
                if (mBootCompleted) {
                    updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
                }
                if ((mCurrentFunctions & UsbManager.FUNCTION_ACCESSORY) != 0) {
                    updateCurrentAccessory();
                }
                if (mBootCompleted) {
                    if (!mConnected && !hasMessages(MSG_ACCESSORY_MODE_ENTER_TIMEOUT)
                            && !hasMessages(MSG_FUNCTION_SWITCH_TIMEOUT)) {
                        // restore defaults when USB is disconnected
                        if (!mScreenLocked
                                && mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
                            setScreenUnlockedFunctions();
                        } else {
                             //这里将默认值UsbManager.FUNCTION_NONE改为UsbManager.FUNCTION_MTP
                             //setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
			                 setEnabledFunctions(UsbManager.FUNCTION_MTP, false);
                        }
                    }
                    updateUsbFunctions();
                } else {
                    mPendingBootBroadcast = true;
                }
                break;
	    //...
    }
//...
}
    //2 finishboot部分
    protected void finishBoot() {
        if (mBootCompleted && mCurrentUsbFunctionsReceived && mSystemReady) {
            if (mPendingBootBroadcast) {
                updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
                mPendingBootBroadcast = false;
            }
            if (!mScreenLocked
                    && mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
                setScreenUnlockedFunctions();
            } else {
                 //这里将默认值UsbManager.FUNCTION_NONE改为UsbManager.FUNCTION_MTP
                 //setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
      	         setEnabledFunctions(UsbManager.FUNCTION_MTP, false);
            }
            if (mCurrentAccessory != null) {
                mUsbDeviceManager.getCurrentSettings().accessoryAttached(mCurrentAccessory);
            }
            updateUsbNotification(false);
            updateAdbNotification(false);
            updateUsbFunctions();
        }
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图王大胜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值