Android Bluetooth pairing Security
Asked Answered
O

1

6

Since I upgraded to android 4.2 I'm having trouble when I try to pair a device The device should be paired but now it says that across_user_permission is required.

Here is the error log :

error:code 3:
java.lang.SecurityException::
Permission Denial: broadcast from android asks to run as user -1 but is calling from user0; this requires
android.permission.INTERACT_ACROSS_USERS_FULL or
android.permission.INTERACT_ACROSS_USERS.

and here my method :

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;
}
Outgoings answered 27/1, 2014 at 16:36 Comment(0)
A
1

I would change the code to:

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 is an asynchronous call, it will return immediately. Register for ACTION_BOND_STATE_CHANGED intents to be notified when the bonding process completes, and its result.

Argueta answered 12/6, 2014 at 1:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.