Android默认设置MTP模式

本文介绍了一种针对高通MSM8953平台,如何在Android7.1系统中强制开启MTP模式的方法。由于系统默认移除了MTP,通过修改`system.prop`文件的参数无效,作者在`UsbDeviceManager.java`中做了两处修改,直接设置USB功能为MTP。此外,还提供了一个具有系统权限的apk方案,通过运行命令行指令实现相同功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里主要以高通MSM8953为例

–a device/qcom/msm8963_64/system.prop
++b device/qcom/msm8963_64/system.prop
#Set composition for USB
-persist.sys.usb.config=diag,serial_smd,rmnet_qti_bam,adb
+persist.sys.usb.config=mtp,adb
#Set read only default composition for USB
ro.sys.usb.default.config=diag,serial_smd,rmnet_qti_bam,adb
一般情况下,修改persist.sys.usb.config对应的参数便可以,但是Android7.1在UsbDeviceManager.java中厂商默认把MTP移除掉了,所以,就算修改了persist.sys.usb.config这个参数值,也不起作用,但是在别的平台尝试是可以的

这处修改不起作用没关系,在这里我修改了另外一处实现了此功能
–a frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java
++b frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java

第一处修改如下:

else if (!mConnected) {
// restore defaults when USB is disconnected
++ //start:add by wf 2022/08/02
– setEnabledFunctions(null, false, false);
++ // setEnabledFunctions(null, false, false);
++ //UsbManager.USB_FUNCTION_MTP就是一个string类型,直接传“mtp”也是一样的
++ setCurrentFunctions(UsbManager.USB_FUNCTION_MTP,true);
++ //end:add by wf 2022/08/02
}

第二处修改如下:

case MSG_BOOT_COMPLETED:
mBootCompleted = true;
++ //start:add by wf 2022/08/02
++ setCurrentFunctions(UsbManager.USB_FUNCTION_MTP,true);
++ //end:add by wf 2022/08/02
if (mCurrentAccessory != null) {
getCurrentSettings().accessoryAttached(mCurrentAccessory);
}
if (mDebuggingManager != null) {
mDebuggingManager.setAdbEnabled(mAdbEnabled);
}
break;

修改后直接编译出固件,直接烧录固件即可。
如果不想修改固件,也可以通过另外一种实现,写一个具有系统权限的apk,push下去。
/**

  • Created by wf on 2022/7/29 - 16:05
    **/
    public class Command {
    private static String TAG = “UsbSetting”;

    /**

    • @param commandData 1: “setprop persist.sys.usb.config mtp,adb” mtp模式和adb
    •                                    2: "setprop persist.sys.usb.config none" 充电模式
      

    */
    public static void command(String commandData) {
    try {
    Log.v(TAG, "Command : " + commandData);
    Runtime.getRuntime().exec(commandData);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

}

直接调用此方法,commandData参数直接传"setprop persist.sys.usb.config mtp,adb"便可
注意,此apk在清单文件的根目录下必须加上android:sharedUserId=“android.uid.system”,然后受系统权限,具体如何写一个具有系统权限的apk可以参考我其他博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值