【问题标题】:USB Request Permission action Broadcast not receivedUSB 请求权限操作未收到广播
【发布时间】:2022-12-31 19:05:41
【问题描述】:

我正在使用以下代码访问 Android 上的 USB 设备。

private final String ACTION_USB_PERMISSION = "com.myapp.USB_PERMISSION";

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            log(Log.INFO, TAG, "on intent received >" + intent.getAction());
            if (ACTION_USB_PERMISSION.equals(action)) {
                log(Log.INFO, TAG, "On receive for usb permission");
                synchronized (this) {
                    UsbDevice device = (UsbDevice) intent
                            .getParcelableExtra(UsbManager.EXTRA_DEVICE);
                    if (intent.getBooleanExtra(
                            UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        log(Log.INFO, TAG, "Usb connection permission accepted");
                        //permission granted
                        if (device != null) {
                            log(Log.INFO, TAG, "usb connection devices");

                        } else {
                            log(Log.INFO, TAG, "No usb connection devices");
                        }
                    } else {
                        log(Log.INFO, TAG, "Usb connection permission denied");
                        UIHelper.showToastLong("Usb permission is needed to use the USB Device", activity);
                    }
                }
            }
        }
};

UsbManager usbManager = (UsbManager) activity.getSystemService(Context.USB_SERVICE);
PendingIntent permissionIntent = PendingIntent.getBroadcast(activity, 0,
        new Intent(ACTION_USB_PERMISSION), 0);
activity.registerReceiver(mUsbReceiver, new IntentFilter(ACTION_USB_PERMISSION));
while (true) {
    if (!usbManager.hasPermission(usbDevice)) {
        usbManager.requestPermission(usbDevice, permissionIntent);
    } else {
        break;
    }
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

这在 Android 10 上运行良好。但在 Android 7.1.2 上不起作用

权限请求弹出窗口一遍又一遍地出现,并且永远不会触发 mUsbReceiver。这是什么原因?

【问题讨论】:

    标签: android broadcastreceiver usb


    【解决方案1】:
    • 我认为你不应该在这里使用循环。尝试使用 usbManager.requestPermission(usbDevice, permissionIntent);UsbManager.EXTRA_PERMISSION_GRANTED 返回 false 的情况。
    • 还有注销如果您在onCreate() 中注册,则收件人在onDestroy() 中;如果在onResume() 中注册,则在onPause() 中取消注册。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 2019-10-24
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 2019-08-20
      相关资源
      最近更新 更多