USB 设备连接在 6.0 之后不工作(Marshmallow)
USB device connectivity not working after 6.0 (Marshmallow)
在我的 Android 项目中,我试图通过 USB 端口将平板电脑与 Arduino 设备进行通信,它适用于版本 5.1(API 22:Lollipop),但它不起作用t 用于 6.0(API 23:Marshmallow),因为此 Android 版本中实施的权限更改。
我已经将我的目标 SDK 版本设置为 API 22,但仍然不起作用。
在我的Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[...]
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
UsbAccessory accessory = (accessories == null ? null : accessories[0]);
if (accessory != null) {
if (mUsbManager.hasPermission(accessory)) {
openAccessory(accessory);
} else {
synchronized (mUsbReceiver) {
if (!mPermissionRequestPending) {
mUsbManager.requestPermission(accessory,
mPermissionIntent);
mPermissionRequestPending = true;
}
}
}
}
}
怎么了?我错过了什么?
尝试授予权限。
String permission = android.Manifest.permission.YOUR_PERMISSION;
private static void requestPermission(Activity activity) {
if (hasPermission(permission)) return;
ActivityCompat.requestPermissions(activity, new String[]{permission}, REQUEST_CODE);
}
public static boolean hasPermission() {
return ContextCompat.checkSelfPermission(SupAndroid.appContext, permission) == PERMISSION_GRANTED;
}
正在等待您 Activity
的 onActivityResult
的回调
最后,Arduino ADK(2012 年最新更新)不适用于 Android API 高于 6.0(包括)的版本,无论我请求了多少权限。
我不得不改变我的策略,让我的 Android 设备成为主机,Arduino 成为附件。
问题已解决,但 Arduino 并未按预期为平板电脑充电。
在我的 Android 项目中,我试图通过 USB 端口将平板电脑与 Arduino 设备进行通信,它适用于版本 5.1(API 22:Lollipop),但它不起作用t 用于 6.0(API 23:Marshmallow),因为此 Android 版本中实施的权限更改。
我已经将我的目标 SDK 版本设置为 API 22,但仍然不起作用。
在我的Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[...]
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(
ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_DETACHED);
UsbAccessory[] accessories = mUsbManager.getAccessoryList();
UsbAccessory accessory = (accessories == null ? null : accessories[0]);
if (accessory != null) {
if (mUsbManager.hasPermission(accessory)) {
openAccessory(accessory);
} else {
synchronized (mUsbReceiver) {
if (!mPermissionRequestPending) {
mUsbManager.requestPermission(accessory,
mPermissionIntent);
mPermissionRequestPending = true;
}
}
}
}
}
怎么了?我错过了什么?
尝试授予权限。
String permission = android.Manifest.permission.YOUR_PERMISSION;
private static void requestPermission(Activity activity) {
if (hasPermission(permission)) return;
ActivityCompat.requestPermissions(activity, new String[]{permission}, REQUEST_CODE);
}
public static boolean hasPermission() {
return ContextCompat.checkSelfPermission(SupAndroid.appContext, permission) == PERMISSION_GRANTED;
}
正在等待您 Activity
的onActivityResult
的回调
最后,Arduino ADK(2012 年最新更新)不适用于 Android API 高于 6.0(包括)的版本,无论我请求了多少权限。 我不得不改变我的策略,让我的 Android 设备成为主机,Arduino 成为附件。
问题已解决,但 Arduino 并未按预期为平板电脑充电。