介绍
客户需求:需要默认usb插入时为数据传输模式,并且是每次插拔都默认成MTP
修改
根据log显示插拔USB切换模式时UsbDeviceManager.java中触发了我们只需要修改setEnabledFunctions(UsbManager.FUNCTION_MTP, true)即可需要注意需要修改两处,下方代码已加上修改注释
路径: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);
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 {
//*/soda water.20230918 default mtp 此处不让usb拔出时恢复为none 变为mtp
setEnabledFunctions(UsbManager.FUNCTION_MTP, true);
//setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
//*/
protected void finishBoot() {
if (mBootCompleted && mCurrentUsbFunctionsReceived && mSystemReady) {
if (mPendingBootBroadcast) {
updateUsbStateBroadcastIfNeeded(getAppliedFunctions(mCurrentFunctions));
mPendingBootBroadcast = false;
}
if (!mScreenLocked
&& mScreenUnlockedFunctions != UsbManager.FUNCTION_NONE) {
setScreenUnlockedFunctions();
} else {
//*/soda water.20230918 default mtp 开机默认MTP
setEnabledFunctions(UsbManager.FUNCTION_MTP, true);
//setEnabledFunctions(UsbManager.FUNCTION_NONE, false);
//*/
}