title: Android lollipop java.lang.SecurityException: Neither user nor current process has android.permission.BLUETOOTH_PRIVILEGED
body: <p>I'm currently working on a Android application that connects to a device via Bluetooth using Eclipse (Java). Currently I have it working on Android 4.4 (Kit-Kat) and below, but after the new update which is Android 5 (Lollipop). Security exception occurs.</p>
  
  <p>Manifest:</p>
  
  <pre><code>&lt;uses-permission android:name="android.permission.BLUETOOTH" /&gt;
  &lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /&gt;
  &lt;uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" /&gt;
  &lt;uses-feature android:name="android.hardware.bluetooth_le"
          android:required="false" /&gt;
  </code></pre>
  
  <p>Code:</p>
  
  <pre><code>mBleScanner.startScan(filters, scanSettings, mLeScanCallback);
  
  private ScanCallback mLeScanCallback = new ScanCallback()
  {
      @Override
      public void onScanResult(int callbackType, ScanResult result)
      {
          BluetoothDevice device = result.getDevice();
          if(device.getName() != null)
          {
              if(device.getName().toUpperCase().contains("MyDevice"))
              {
  
                  mBleScanner.stopScan(mLeScanCallback);
  
                  if (device.getBondState() == BluetoothDevice.BOND_BONDED)
                  {
                      Connect(device.getAddress().toString()); 
                  }
                  else
                  {
                      // pair device
                      device.setPairingConfirmation(true);
                      device.createBond();
                  }
              }
          }
      }
  };
  ...
  ..
  .
  private void BondDevice(BluetoothGattCharacteristic bgc, boolean pnEnable)
  {
      boolean bool = gatt.setCharacteristicNotification(bgc, true); // this line throw security exception
      BluetoothGattDescriptor bgd=bgc.getDescriptor(UUID.fromString(BLE_DESCRIPTOR_NOTIFY));
  
      byte[] arrayOfByte = pnEnable ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE:
                        BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE;
      gattDescriptor.setValue(arrayOfByte);
      mBluetoothGatt.writeDescriptor(bgd);
  }
  </code></pre>
  
  <p>Stack Trace:</p>
  
  <pre><code>04-27 12:36:24.559: W/BluetoothGatt(17764): Unhandled exception in callback
  04-27 12:36:24.559: W/BluetoothGatt(17764): java.lang.SecurityException: Need BLUETOOTH_PRIVILEGED permission: Neither user 10215 nor current process has android.permission.BLUETOOTH_PRIVILEGED.
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.os.Parcel.readException(Parcel.java:1540)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.os.Parcel.readException(Parcel.java:1493)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.bluetooth.IBluetoothGatt$Stub$Proxy.registerForNotification(IBluetoothGatt.java:1163)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.bluetooth.BluetoothGatt.setCharacteristicNotification(BluetoothGatt.java:1239)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at com.vibease.ap3.service.ServiceBLE.BondDevice(ServiceBLE.java:568)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at com.vibease.ap3.service.ServiceBLE.CheckDevice(ServiceBLE.java:518)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at com.vibease.ap3.service.ServiceBLE.access$7(ServiceBLE.java:493)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at com.vibease.ap3.service.ServiceBLE$2.onServicesDiscovered(ServiceBLE.java:373)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.bluetooth.BluetoothGatt$1.onSearchComplete(BluetoothGatt.java:309)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:217)
  04-27 12:36:24.559: W/BluetoothGatt(17764):     at android.os.Binder.execTransact(Binder.java:446)
  </code></pre>