【问题标题】:How to force USB device scan programmatically?如何以编程方式强制 USB 设备扫描?
【发布时间】:2017-12-19 08:56:46
【问题描述】:

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

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

然后我的应用使用 Android USB 主机 API 请求对 USB 存储的独占访问权限。由于是独占访问,Android系统会广播ACTION_MEDIA_REMOVED事件,除我的应用外,其他人都无法访问USB存储。

在我的应用程序对 USB 存储执行我想要的操作后,我会将控制权释放给 Android 系统。但是安卓系统不会再自动挂载了。我必须先拔掉再重新插入USB设备,才能让Android系统挂载USB设备。

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

【问题讨论】:

  • 您不能播放已安装的动作媒体吗?嗯,我认为你可以,但这无济于事..
  • @greenapps 感谢您的想法。我猜普通应用程序无权发送这种广播。我会试一试的。
  • 您是否找到了适用于非 root 设备的解决方案?

标签: android usb


【解决方案1】:

如果设备已root,您可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2011-03-09
    相关资源
    最近更新 更多