小工具知识网

当前位置: 首页 > 行业知识 > Android11.0系统中添加USB otg模式切换为host

行业知识

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

2026-11-09 09:08:52 来源:互联网转载

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

  • 添加USB otg模式切换为host
    • 通过adb命令直接切换
    • 自定义服务中添加切换方法
    • 封装的jar中添加对应方法供第三方应用开发者调用
    • 在系统设置中添加控制开关参见其它文章自行实现

      添加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);

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

上一篇:响应式网站怎么制作?

下一篇:站长自营云服务器cn2的简单介绍