我正在编写一个在USB主机模式下工作的Android应用程序,以从连接的USB存储设备中读取数据。
当USB存储设备首次连接到Android设备时,Android系统将自动安装它(以后可以在系统设置->存储和USB中进行访问。
然后我的应用程序请求使用Android USB主机API独占访问USB存储设备。由于是专有访问,因此Android系统将广播ACTION_MEDIA_REMOVED事件,除我的应用程序外,没有人可以访问USB存储设备。
我的应用程序完成了对USB存储设备的操作后,我将控件释放到Android系统。但是Android系统不会再自动安装它。我必须拔出并重新插入USB设备,才能让Android系统挂载USB设备。
所以我的问题是,有什么方法可以触发Android系统以编程方式重新安装USB存储设备?
如果设备已植根,则可以这样操作:
private void replugUsb() {
Log.d(APP_TAG, "replugUsb()");
try{
Process su = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
outputStream.writeBytes("echo 0 > /sys/bus/usb/devices/usb1/authorized\n");
outputStream.flush();
outputStream.writeBytes("echo 1 > /sys/bus/usb/devices/usb1/authorized\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
su.waitFor();
}catch(IOException | InterruptedException e){
Log.e(APP_TAG, "replugUsb: failed", e);
}
}