Android11.0系统中添加USB otg模式切换为host
添加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);