第一:请求权限和请求权限回调(通过广播回调)
注册一个广播接收器用于接收USB权限被同意或拒绝后发出的广播
//注册USB设备权限管理广播
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); //ACTION_USB_PERMISSION为自定义的字符串
context.registerReceiver(usbReceiver, filter);
其中usbReceiver的实现是:
private BroadcastReceiver usbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if(action.equals(ACTION_USB_PERMISSION)){//ACTION_USB_PERMISSION是前面我们自己自定义的字符串
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
LogUtils.i("已获取USB权限");
}
} else {
LogUtils.i("USB权限被拒绝");
}
};
请求权限:
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0);//关于这个mPermissionIntent ,具体的作用我还没弄明白,明白以后补充
manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
manager.requestPermission(device,mPermissionIntent);//device是具体某个usb设备
执行完这个后,界面会弹出对话框询问用户是否授予权限,然后会发送权限广播,所以上面我们注册一个广播接收器来判断权限状态
第二:注册USB设备插拔广播
USB设备被插/拔后同样会发送一个广播,因此我们需要注册一个接收器来接收这个广播
IntentFilter stateFilter = new IntentFilter();
stateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
stateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
context.registerReceiver(usbStateReceiver, stateFilter);
其中.usbStateReceiver的实现如下:
private BroadcastReceiver usbStateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//USB连接上手机时会发送广播android.hardware.u