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