title: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10065 nor current process has android.permission.BLUETOOTH
body: <p>I am completely new to android programming and this is technically my first big project working on Android Studio. I am trying to create an android app that connects to my Arduino device via Bluetooth and eventually processes a .txt file.</p>
  <p>Currently, I cant seem to be able to enable Bluetooth. When I click the button which should ask for users' permission to activate Bluetooth, the app freezes and eventually crashes.</p>
  <p>I have included java and logcat. Any help on this matter?</p>
  <p>java file:</p>
  <pre><code>package com.example.a0111601.testsplash;
  
  import android.app.Activity;
  import android.bluetooth.BluetoothSocket;
  import android.bluetooth.BluetoothServerSocket;
  import android.os.AsyncTask;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.content.BroadcastReceiver;
  import android.content.Context;
  
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Set;
  import java.util.UUID;
  
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.AdapterView;
  import android.widget.ArrayAdapter;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.ListView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  public class ConnectingScreen extends Activity {
  
      private TextView text;
      private ArrayAdapter&lt;String&gt; BTArrayAdapter;
      private ListView listView;
      public BluetoothAdapter bluetoothAdapter;
      private final static UUID uuid = UUID.fromString(&quot;fc5ffc49-00e3-4c8b-9cf1-6b72aad1001a&quot;);
      private Button btn_refresh;
      private Button btn_proceed;
      private ArrayAdapter adapter;
      private static final int ENABLE_BT_REQUEST_CODE = 1;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.connecting_screen);
  
          // Initialize items on the screen from the layout in order //
  
          // Get bluetooth status //
          text = (TextView) findViewById(R.id.status_BT);
          bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
          if (!bluetoothAdapter.isEnabled()) { // if bluetooth has not been enabled //
              text.setText(&quot;Disabled&quot;);
          } else { // bluetooth has already been enabled //
              text.setText(&quot;Enabled&quot;);
          }
  
          // Set up list for selection of available devices //
          listView = (ListView) findViewById(R.id.Connecting_devices);
          // Click listener on list //
          listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView&lt;?&gt; parent, View v, int position, long id) {
                  // Cancel discovery because it's costly and we're about to connect
                  bluetoothAdapter.cancelDiscovery();
  
                  // Get the device MAC address, which is the last 17 chars in the View
                  String info = ((TextView) v).getText().toString();
                  String address = info.substring(info.length() - 17);
                  BluetoothDevice bluetoothDevice = bluetoothAdapter.getRemoteDevice(address);
                  // Initiate a connection request in a separate thread
                  ConnectingThread t = new ConnectingThread(bluetoothDevice);
                  t.start();
              }
          });
  
          BTArrayAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_1);
          listView.setAdapter(BTArrayAdapter);
  
          // Register for broadcasts when a device is discovered
          IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
          this.registerReceiver(mReceiver, filter);
  
          // Register for broadcasts when discovery has finished
          filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
          this.registerReceiver(mReceiver, filter);
  
          // Initialize Refresh button //
          btn_refresh = (Button) findViewById(R.id.refresh);
          btn_refresh.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  BTArrayAdapter.clear();
                  while (!bluetoothAdapter.isEnabled()) { // if bluetooth has not been enabled //
                      // Dialog to request user permission to enable BT //
                      Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                      startActivityForResult(enableBluetoothIntent, ENABLE_BT_REQUEST_CODE);
                  }
                  if (bluetoothAdapter.isEnabled()) { // bluetooth has already been enabled //
                      text.setText(&quot;Enabled&quot;);
                      // To discover devices //
                      discoverDevices();
                      Toast.makeText(getApplicationContext(), &quot;Scanning for devices...&quot;, Toast.LENGTH_LONG).show();
                  }
              }
          });
  
          btn_proceed = (Button) findViewById(R.id.proceed_footer);
          // Source: http://stackoverflow.com/questions/24610527/how-do-i-get-a-button-to-open-another-activity-in-android-studio //
          // Proceed button to continue on to next activity //
          btn_proceed.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick (View v) {
                  startActivity(new Intent(ConnectingScreen.this, MainActivity.class));
              }
          });
  
          // Disable &quot;proceed&quot; button by default to prevent user from going to next activity //
          // Source: //
          // http://stackoverflow.com/questions/4384890/how-to-disable-an-android-button //
          btn_proceed.setEnabled(false);
  
      }
  
      // ConnectingThread method to connect to device selected from list //
      private class ConnectingThread extends Thread {
          private final BluetoothSocket bluetoothSocket;
          private final BluetoothDevice bluetoothDevice;
  
          public ConnectingThread(BluetoothDevice device) {
              BluetoothSocket temp = null;
              bluetoothDevice = device;
  
              // Get a BluetoothSocket to connect with the selected BluetoothDevice
              try {
                  temp = bluetoothDevice.createRfcommSocketToServiceRecord(uuid);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              bluetoothSocket = temp;
          }
  
          public void run() {
              // Cancel discovery first to not slow down connection speed //
              bluetoothAdapter.cancelDiscovery();
  
              try {
                  // bluetoothSocket.connect() to initiate connection request //
                  // This will block until it succeeds in connecting to the device through the bluetoothSocket or throws an exception //
                  bluetoothSocket.connect();
              } catch (IOException connectException) {
                  connectException.printStackTrace();
                  try {
                      bluetoothSocket.close();
                  } catch (IOException closeException) {
                      closeException.printStackTrace();
                  }
              }
              if (bluetoothSocket.isConnected()) {
                  btn_proceed.setEnabled(true);
              }
          }
      }
  
      // discoverDevices() method //
      // To scan for other devices //
      protected void discoverDevices() {
          // If we're already discovering, stop it
          if (bluetoothAdapter.isDiscovering()) {
              bluetoothAdapter.cancelDiscovery();
          }
          bluetoothAdapter.startDiscovery();
          // to change the bluetooth status accordingly //
          if (bluetoothAdapter.startDiscovery()) {
              text.setText(&quot;Scanning&quot;);
              Toast.makeText(getApplicationContext(), &quot;Scanning for devices...&quot;, Toast.LENGTH_LONG).show();
          } else {
              text.setText(&quot;Error scanning&quot;);
              Toast.makeText(getApplicationContext(), &quot;Discovery failed to start!&quot;, Toast.LENGTH_LONG).show();
          }
      }
  
      /**
       * The BroadcastReceiver that listens for discovered devices and changes the title when
       * discovery is finished
       */
      private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
          @Override
          public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
  
              // When discovery finds a device //
              if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                  // Get the BluetoothDevice object from the Intent //
                  BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                  // If it's already paired, skip it, because it's been listed already //
                  if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                      BTArrayAdapter.add(device.getName() + &quot;\n&quot; + device.getAddress());
                  }
  
                  // When discovery is finished, change the Activity title //
              } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                  Toast.makeText(getApplicationContext(), &quot;Select device to pair with&quot;, Toast.LENGTH_LONG).show();
                  text.setText(&quot;Select device from list&quot;);
                  if (BTArrayAdapter.getCount() == 0) {
                      text.setText(&quot;No devices found&quot;);
                      String noDevices = getResources().getText(R.string.none_found).toString();
                      BTArrayAdapter.add(noDevices);
                  }
              }
          }
      };
  
      @Override
      protected void onDestroy() {
          super.onDestroy();
  
          // Make sure we're not doing discovery anymore
          if (bluetoothAdapter != null) {
              bluetoothAdapter.cancelDiscovery();
          }
          // Unregister broadcast listeners
          this.unregisterReceiver(mReceiver);
      }
  }
  </code></pre>
  <p>logcat:</p>
  <pre><code>10-20 14:52:23.693 6976-6976/? E/Zygote: MountEmulatedStorage()
  10-20 14:52:23.693 6976-6976/? E/Zygote: v2
  10-20 14:52:23.693 6976-6976/? I/libpersona: KNOX_SDCARD checking this for 10065
  10-20 14:52:23.693 6976-6976/? I/libpersona: KNOX_SDCARD not a persona
  10-20 14:52:23.693 6976-6976/? I/SELinux: Function: selinux_compare_spd_ram, SPD-policy is existed. and_ver=SEPF_GT-I9505_5.0.1 ver=27
  10-20 14:52:23.693 6976-6976/? I/SELinux: Function: selinux_compare_spd_ram , priority [2] , priority version is VE=SEPF_GT-I9505_5.0.1-1_0032
  10-20 14:52:23.703 6976-6976/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
  10-20 14:52:23.703 6976-6976/? I/art: Late-enabling -Xcheck:jni
  10-20 14:52:23.723 6976-6983/? E/art: Failed sending reply to debugger: Broken pipe
  10-20 14:52:23.723 6976-6983/? I/art: Debugger is no longer active
  10-20 14:52:23.753 6976-6976/? D/ResourcesManager: creating new AssetManager and set to /data/app/com.example.a0111601.testsplash-2/base.apk
  10-20 14:52:23.943 6976-6976/? D/Activity: performCreate Call secproduct feature valuefalse
  10-20 14:52:23.943 6976-6976/? D/Activity: performCreate Call debug elastic valuetrue
  10-20 14:52:23.953 6976-7015/? D/OpenGLRenderer: Render dirty regions requested: true
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: &lt;qeglDrvAPI_eglInitialize:410&gt;: EGL 1.4 QUALCOMM build:  ()
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: OpenGL ES Shader Compiler Version: E031.25.03.06
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: Build Date: 01/24/15 Sat
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: Local Branch: AF11_RB1_AU15
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: Remote Branch: 
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: Local Patches: 
  10-20 14:52:23.983 6976-7015/? I/Adreno-EGL: Reconstruct Branch: 
  10-20 14:52:23.983 6976-7015/? I/OpenGLRenderer: Initialized EGL, version 1.4
  10-20 14:52:24.013 6976-7015/? D/OpenGLRenderer: Enabling debug mode 0
  10-20 14:52:24.674 6976-6976/? I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@29f66b0b time:6733391
  10-20 14:52:25.735 6976-6983/com.example.a0111601.testsplash I/art: Ignoring second debugger -- accepting and dropping
  10-20 14:52:26.736 6976-7014/? I/Timeline: Timeline: Activity_launch_request id:com.example.a0111601.testsplash time:6735467
  10-20 14:52:26.816 6976-6976/? D/AbsListView: Get MotionRecognitionManager
  10-20 14:52:26.836 6976-6976/? D/Activity: performCreate Call secproduct feature valuefalse
  10-20 14:52:26.836 6976-6976/? D/Activity: performCreate Call debug elastic valuetrue
  10-20 14:52:27.066 6976-6976/? I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@21202ee1 time:6735796
  10-20 14:53:00.079 6976-6976/? I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@21202ee1 time:6768804
  10-20 14:54:12.720 6976-6976/? D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
  10-20 14:54:14.441 6976-6976/? D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
  10-20 14:54:14.952 6976-6976/? D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
  10-20 14:54:17.514 6976-6976/? D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
  10-20 15:04:08.991 6976-6976/? D/AndroidRuntime: Shutting down VM
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime: FATAL EXCEPTION: main
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime: Process: com.example.a0111601.testsplash, PID: 6976
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10065 nor current process has android.permission.BLUETOOTH.
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1540)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1493)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.bluetooth.IBluetooth$Stub$Proxy.isEnabled(IBluetooth.java:1156)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.bluetooth.BluetoothAdapter.isEnabled(BluetoothAdapter.java:695)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at com.example.a0111601.testsplash.ConnectingScreen$2.onClick(ConnectingScreen.java:93)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.view.View.performClick(View.java:5197)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:20926)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:145)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5942)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
  10-20 15:04:09.021 6976-6976/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime: Error reporting crash
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime: android.os.DeadObjectException
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at android.os.BinderProxy.transactNative(Native Method)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at android.os.BinderProxy.transact(Binder.java:496)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4686)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:95)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
  10-20 15:04:09.031 6976-6976/? E/AndroidRuntime:     at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
  10-20 15:04:09.031 6976-6976/? I/Process: Sending signal. PID: 6976 SIG: 9
  </code></pre>
  <p>Manifest:</p>
  <pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
  &lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;com.example.a0111601.testsplash&quot;&gt;
  
      &lt;uses-permission android:name=&quot;android.permission.BLUETOOTH&quot; /&gt;
      &lt;uses-permission android:name=&quot;android.permission.BLUETOOTH_ADMIN&quot; /&gt;
  
      &lt;application
          android:allowBackup=&quot;true&quot;
          android:icon=&quot;@mipmap/ic_launcher&quot;
          android:label=&quot;@string/app_name&quot;
          android:supportsRtl=&quot;true&quot;
          android:theme=&quot;@style/AppTheme&quot;&gt;
          &lt;activity
              android:name=&quot;.splash&quot;
              android:configChanges=&quot;orientation|keyboardHidden|screenSize&quot;
              android:label=&quot;@string/app_name&quot;
              android:theme=&quot;@android:style/Theme.Translucent.NoTitleBar&quot;&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
  
                  &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
              &lt;/intent-filter&gt;
  
          &lt;/activity&gt;
  
          &lt;activity
              android:name=&quot;.ConnectingScreen&quot;
              android:configChanges=&quot;orientation|keyboardHidden|screenSize&quot;
              android:label=&quot;@string/app_name&quot;&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name=&quot;com.example.a0111601.CONNECTINGSCREEN&quot; /&gt;
  
                  &lt;category android:name=&quot;android.intent.category.DEFAULT&quot; /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
  
          &lt;activity
              android:name=&quot;.MainActivity&quot;
              android:label=&quot;@string/app_name&quot;&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name=&quot;com.example.a0111601.MAINACTIVITY&quot; /&gt;
  
                  &lt;category android:name=&quot;android.intent.category.DEFAULT&quot; /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
  
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>