public static Task <bool> RequestPermissionAsync(this UsbManager manager, UsbDevice device, Context context) { if (manager == null) { throw new ArgumentNullException(nameof(manager)); } if (device == null) { throw new ArgumentNullException(nameof(device)); } if (context == null) { throw new ArgumentNullException(nameof(context)); } string permission = String.Format(ExtendedUsbConstants.ACTION_USB_PERMISSION_FORMAT, context.PackageName); var usbPermissionReceiver = new UsbBroadcastReceiver <bool>((c, i) => i.GetBooleanExtra(UsbManager.ExtraPermissionGranted, false)); usbPermissionReceiver.Register(context, permission, true); PendingIntent intent = PendingIntent.GetBroadcast(context, 0, new Intent(permission), 0); manager.RequestPermission(device, intent); return(usbPermissionReceiver.ReceiveTask); }
protected override void Initialize() { usbManager = (UsbManager)context.GetSystemService(Android.Content.Context.UsbService); usbBroadcastReceiver = new UsbBroadcastReceiver(); usbBroadcastReceiver.addDevice = AddDevice; usbBroadcastReceiver.filterDevice = FilterDevice; usbBroadcastReceiver.removeDevice = RemoveDevice; IntentFilter f = new IntentFilter(ACTION_USB_PERMISSION); context.RegisterReceiver(usbBroadcastReceiver, f); context.RegisterReceiver(usbBroadcastReceiver, new IntentFilter(UsbManager.ActionUsbDeviceAttached)); context.RegisterReceiver(usbBroadcastReceiver, new IntentFilter(UsbManager.ActionUsbDeviceDetached)); }
protected override void OnResume() { base.OnResume(); lock (_registrationLocker) { if (!_isReceiverRegistered) { _detachedReceiver = new UsbBroadcastReceiver((c, i) => { if (i.GetParcelableExtra(UsbManager.ExtraDevice) is UsbDevice device) { _serialService.SetDeviceAsDisconnected(); MessagingCenter.Send(new DeviceMessage(device.DeviceName), DeviceMessage.DeviceDetached); } }); _detachedReceiver.Register(this, UsbManager.ActionUsbDeviceDetached); _isReceiverRegistered = true; } } }