在我的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;
}
}
}
}
}
怎么了?我想念的是什么?
答案 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
中的回调