Android11.0系统中添加USB otg模式切换为host

本文详细介绍了如何在Android11.0系统中通过ADB命令切换USBotg模式至host模式,涉及自定义服务中的方法封装以及在ITestManager和SDK中添加接口供开发者调用。同时提到在系统设置中添加控制开关的方法。
摘要由CSDN通过智能技术生成

添加USB otg模式切换为host

本文描述Android11中切换USB otg模式切换为host,读取优盘中内容。

通过adb命令直接切换

1.主要是修改设备上/sys/devices/platform/fe8a0000.usb2-phy/otg_mode文件,otg切换到host后,adb无法连接,可以使用adb网络连接调试,重启过后,会恢复到默认模式。

//进入设备
adb shell
//切换为host模式
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
//切换为otg模式
echo otg > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

自定义服务中添加切换方法

  1. 添加自定义属性,路径为 /device/rockchip/rk356x/rk356x.prop;
persist.sys.usb_otg_mode=otg
  1. ITestManager及TestManager中添加方法定义,路径为 /frameworks/base/core/com/yjz/test/api/ITestManager.aidl;
    void switchUsbOtgHostMode(int mode);

/frameworks/base/core/com/yjz/test/TestManager.java

    public void switchUsbOtgHostMode(int mode) {
        try {
            mService.switchUsbOtgHostMode(mode);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
  1. TestManagerService中添加方法,路径为 /frameworks/base/services/core/java/com/android/server/yjz/TestManagerService.java;
//********省略代码******

    @Override
    public void switchUsbOtgHostMode(int mode) throws RemoteException {
        Message msg = Message.obtain();
        msg.what = MSG_WHAT_SWITCH_USB_MODE;
        msg.obj = mode == 1 ? "otg" : "host";
        mHandler.sendMessage(msg);
    }

    private static final int MSG_WHAT_SWITCH_USB_MODE = 11;
    private static final String USB_OTG_MODE_KEY = "persist.sys.usb_otg_mode";

    private Handler mHandler = new Handler() {
        @Override
        public void dispatchMessage(@NonNull Message msg) {
            switch (msg.what) {
                case MSG_WHAT_SWITCH_USB_MODE:
                    String newMode = (String) msg.obj;
                    SystemProperties.set(USB_OTG_MODE_KEY, newMode);
                    boolean result = switchUsbOtgHostMode(newMode);
                    Log.d(TAG, "switch usb mode " + (result ? "success" : "fail"));
                    break;
            }
        }
    };

    //usb设备模式路径
    private static final String USB_MODE_PATH = "/sys/devices/platform/fe8a0000.usb2-phy/otg_mode";

    public boolean switchUsbOtgHostMode(String mode){
        if (null == mode || "".equals(mode)) {
            return false;
        }
        String value = Tools.readByFileRead(USB_MODE_PATH);
        if (mode.equals(value)) {
            return true;
        }
        return Tools.writeByFileWrite(USB_MODE_PATH, mode);
    }

    public void onStart() {
        //设备重启后会恢复默认值,所以自定义服务启动后根据保存的自定义属性进行设置
        switchUsbOtgHostMode(SystemProperties.get(USB_OTG_MODE_KEY));
    }

//********省略代码******

封装的jar中添加对应方法供第三方应用开发者调用

  1. 在添加 修改路径/vendor/yjz/com/yjz/sdk/SDKManager.java

//********省略代码******
    public static final int USB_MODE_OTG = 1;
    public static final int USB_MODE_HOST = 2;

    public void switchUsbOtgHostMode(int mode) {
        mTestManager.switchUsbOtgHostMode(mode);
    }

//********省略代码******

  1. 编译 mmm vendor/yjz/ 生成yjz-sdk-api.jar
  2. 应用开发时导入yjz-sdk-api.jar,并调用方法
   SDKManager manger = new SDKManager(this);
   manger.switchUsbOtgHostMode(USB_MODE_HOST);

在系统设置中添加控制开关参见其它文章自行实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值