Seguridad de sincronización de Android bluetooth
Desde que actualizé a android 4.2 Tengo problemas cuando trato de emparejar un dispositivo El dispositivo debe ser emparejado, pero ahora se dice que acros_user_permission es necesario.
Aquí está el registro de errores:
Error: code 3: java.lang.SecurityException :: Permission Negación: broadcast from android pide ejecutar como user -1 pero está llamando desde user0; Esto requiere android.permission.INTERACT_ACROSS_USERS_FULL o android.permission.INTERACT_ACROSS_USERS.
Y aquí mi método:
public boolean ensurePaired(BluetoothDevice bd) { BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(bd.getAddress()); boolean paired = false; Log.d(TAG,"Pairing with Bluetooth device with name " + device.getName()+" and address "+device.getAddress()); try { Method m = device.getClass().getMethod("createBond"); paired = (Boolean) m.invoke(device); } catch (Exception e) { return paired; } Log.d("BluetoothPlugin -", "Returning "+ "Result: "+paired); return paired; }
Cambiaría el código a:
public boolean ensurePaired(BluetoothDevice bd) { BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(bd.getAddress()); Log.d(TAG,"Pairing with Bluetooth device with name " + device.getName()+" and address "+device.getAddress()); if(device.getBondState() != BluetoothDevice.BOND_BONDED){ device.createBond(); } }
CreateBond es una llamada asíncrona, que volverá inmediatamente. Registrarse para ACTION_BOND_STATE_CHANGED intentos de ser notificado cuando el proceso de enlace se completa, y su resultado.