行业知识
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
自定义服务中添加切换方法
- 添加自定义属性,路径为 /device/rockchip/rk356x/rk356x.prop;
persist.sys.usb_otg_mode=otg
- 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(); } }- 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中添加对应方法供第三方应用开发者调用
- 在添加 修改路径/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); }//********省略代码******- 编译 mmm vendor/yjz/ 生成yjz-sdk-api.jar
- 应用开发时导入yjz-sdk-api.jar,并调用方法
SDKManager manger = new SDKManager(this); manger.switchUsbOtgHostMode(USB_MODE_HOST);
在系统设置中添加控制开关参见其它文章自行实现
上一篇:响应式网站怎么制作?
下一篇:站长自营云服务器cn2的简单介绍