Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Bluetooth pairing Security

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;
}
like image 706
user2838231 Avatar asked Jan 27 '14 16:01

user2838231


1 Answers

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.

like image 84
Gilson Avatar answered Sep 21 '22 13:09

Gilson