在Android 8及以上版本中,使用Android UsbAccessory时可能会遇到返回null的问题。这是由于Android 8引入了新的权限模型,需要动态请求USB设备访问权限。
下面是一个解决这个问题的示例代码:
首先,在AndroidManifest.xml文件中添加以下权限:
然后,在你的Activity中添加以下代码:
private static final String ACTION_USB_PERMISSION = "com.example.USB_PERMISSION";
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbAccessory accessory = UsbManager.getAccessory(intent);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (accessory != null) {
// 在此处处理USB设备访问权限已授权的逻辑
}
} else {
// 在此处处理USB设备访问权限被拒绝的逻辑
}
}
}
}
};
@Override
protected void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbAccessory accessory = usbManager.getAccessoryList()[0];
PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
usbManager.requestPermission(accessory, permissionIntent);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mUsbReceiver);
}
上述代码中,我们首先注册一个广播接收器来接收USB设备访问权限的授权结果。然后在Activity的onResume方法中,我们通过UsbManager的requestPermission方法请求USB设备访问权限。当用户授权或拒绝权限时,会通过广播的形式通知我们,我们可以在广播接收器中处理相应的逻辑。
请注意,上述代码中假设只有一个连接的USB设备,如果有多个连接的USB设备,你需要根据自己的需求进行相应的处理。
希望上述代码对你有帮助!