USB设备连接在6.0(棉花糖)之后不起作用

时间:2018-07-11 09:25:02

标签: android android-6.0-marshmallow connectivity usbserial

在我的Android项目中,我试图通过USB端口与Arduino设备通信平板电脑,并且它适用于版本5.1(API 22:棒棒糖),但不适用于6.0(API 23:棉花糖),因为Android版本中实现的权限更改的说明。

我已将目标SDK版本设置为API 22,但仍然无法正常工作。

在我的活动中

@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;
                    }
                }
            }
        }
    }

怎么了?我想念的是什么?

2 个答案:

答案 0 :(得分:1)

最后,无论我要求多少权限,Arduino ADK(最新更新为2012)都不适用于高于6.0(包含)的Android API版本。 我不得不改变策略,将Android设备作为主机,而将Arduino作为附件。

问题已解决,但Arduino并未按预期给平板电脑充电。

答案 1 :(得分:0)

尝试授予权限。

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;
}

等待活动onActivityResult中的回调