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 并未按预期为平板电脑充电。