如何以编程方式强制USB设备扫描?

时间:2017-12-19 08:56:47

标签: android usb

我正在编写一个在USB主机模式下工作的Android应用程序,用于读取连接的USB存储设备中的数据。

当USB存储首次连接到Android设备时,Android系统会自动安装(稍后可以在系统设置 - >存储和USB 中访问)。

然后我的应用程序请求使用Android USB主机API独占访问USB存储。由于是独家访问,Android系统将播放 ACTION_MEDIA_REMOVED 事件,除了我的应用程序之外,没有人可以访问USB存储设备。

在我的应用程序执行我想要的USB存储器之后,我将控制器发布到Android系统。但Android系统不再自动挂载它。我必须插入并重新插入USB设备,让Android系统安装USB设备。

所以我的问题是,有什么方法可以触发Android系统以编程方式重新安装USB存储器吗?

1 个答案:

答案 0 :(得分:0)

如果设备已植根,则可以执行以下操作:

    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);
        }
    }