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);
        }
示例#2
0
        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));
        }
示例#3
0
        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;
                }
            }
        }