public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    private static string ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
    protected void USBTest()
        var usbManager = (UsbManager)this.Application.ApplicationContext.GetSystemService(UsbService);
        UsbDevice usbDevice = null;
        foreach (var key in usbManager.DeviceList.Keys)
            var device = usbManager.DeviceList[key];
            var productId = device.ProductId;
            var vendorId = device.VendorId;
            // 根据 厂商id 与 设备id 找设备
            if (productId == 8211 && vendorId == 1305)
                usbDevice = device;
                break;
        if (usbDevice == null)
            return "没USB设备!";
        UsbReciever usbReciever = new UsbReciever();
        PendingIntent mPermissionIntent = PendingIntent.GetBroadcast(this, 0, new Intent(
            ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        RegisterReceiver(usbReciever, filter);
        usbManager.RequestPermission(usbDevice, mPermissionIntent);
        if (!usbManager.HasPermission(usbDevice))
            // 没权限.
            // log "没USB权限!";
        UsbDeviceConnection connection = null;
        // 待发数据
        var buffer = new byte[100];
            connection = usbManager.OpenDevice(usbDevice);
            var endPoint = usbDevice.GetInterface(0).GetEndpoint(0);
            connection.BulkTransfer(endPoint, buffer, buffer.Length, 0);
        catch (Exception ex)
            // log "打印失败," + System.Environment.NewLine + ex.Message + System.Environment.NewLine + ex.StackTrace;
        finally
            if (connection != null)
                connection.Close();
    public class UsbReciever : BroadcastReceiver
        public override void OnReceive(Context context, Intent intent)
            String action = intent.Action;
            if (ACTION_USB_PERMISSION.Equals(action))
                lock (this)
                    UsbDevice device = (UsbDevice)intent
                            .GetParcelableExtra(UsbManager.ExtraDevice);
                    if (intent.GetBooleanExtra(
                            UsbManager.ExtraPermissionGranted, false))
                        if (device != null)
                            // call method to set up device communication