Android app crash if bluetooth is disabled in android lollipop

Hello I am trying to test a bluetooth device for Android Lollipop. It works fine, but if you turn off bluetotooth and then launch the app, it crashes and then gives a popup to turn on bluetooth. Whatever it is, you need to enable the popup to enable Bluetooth if it's off.

This is the method that should enable bluetooth:

   private void enableBluetooth() { 
   if(bluetoothAdapter == null) {
     //bluetoothState.setText("Bluetooth NOT supported"); } 
   else if(!bluetoothAdapter.isEnabled()) {
     //bluetoothAdapter.enable(); 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     activity.startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
     } 
   }

      

to start scanning

public void handleScanStart(View view) {
        foundDevices.clear();
        btArrayAdapter.clear();
        ble.startBleScan();
        scanButton.setEnabled(false);
       stopScanButton.setEnabled(true);
}

      

Enable scan start

  public void startBleScan() {
        if(getScanning()) {
           return;
       }

          enableBluetooth();
         scanning = true;


         ScanFilter.Builder filterBuilder = new ScanFilter.Builder();                     //TODO currently default, scans all devices
        ScanSettings.Builder settingsBuilder = new               ScanSettings.Builder();
        settingsBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY);
             List<ScanFilter> filters = new ArrayList<ScanFilter>();
                  filters.add(filterBuilder.build());
                   bluetoothLeScanner.startScan(filters, settingsBuilder.build(), scanCallback);

           Log.d(TAG, "Bluetooth is currently scanning...");
                      }

      

Below is the log file

    04-29 18:09:11.415: E/AndroidRuntime(26155): FATAL EXCEPTION: main
    04-29 18:09:11.415: E/AndroidRuntime(26155): Process: com.android.androidble5, PID: 26155
    04-29 18:09:11.415: E/AndroidRuntime(26155): java.lang.IllegalStateException: Could not execute method of the activity
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.view.View$1.onClick(View.java:4020)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.view.View.performClick(View.java:4780)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.view.View$PerformClick.run(View.java:19866)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.os.Handler.handleCallback(Handler.java:739)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.os.Handler.dispatchMessage(Handler.java:95)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.os.Looper.loop(Looper.java:135) 
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.app.ActivityThread.main(ActivityThread.java:5254)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at java.lang.reflect.Method.invoke(Native Method)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at java.lang.reflect.Method.invoke(Method.java:372)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
    04-29 18:09:11.415: E/AndroidRuntime(26155): Caused by: java.lang.reflect.InvocationTargetException
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at java.lang.reflect.Method.invoke(Native Method)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at java.lang.reflect.Method.invoke(Method.java:372)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at android.view.View$1.onClick(View.java:4015)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    ... 10 more
    04-29 18:09:11.415: E/AndroidRuntime(26155): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(java.util.List, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback)' on a null object reference
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at com.android.androidble5.BluetoothUtility.startBleScan(BluetoothUtility.java:204)
    04-29 18:09:11.415: E/AndroidRuntime(26155):    at com.android.androidble5.MyActivity.handleScanStart(MyActivity.java:247)

      

+3


source to share


2 answers


The correct approach would be before starting the scan, we have to check the BluetoothLeScanner object is null or not like we check on the BluetoothAdapter

Example



if(bluetoothLeScanner != null){
             bluetoothLeScanner.startScan(filters,settingsBuilder.build(),scanCallback);

    }

      

+3


source


You can tell the user that Bluetooth is not enabled in the dialog and then activate it for them when they click OK (or do nothing if they click Cancel) with the following code:



final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (!bluetoothAdapter.isEnabled()) {
 final AlertDialog.Builder builder = new AlertDialog.Builder(this);
 builder.setTitle("Bluetooth not enabled");
 builder.setMessage("Press OK to enable bluetooth");
 builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  @Override
  public void onClick(DialogInterface dialog, int which) {
   Log.d(TAG, "Enabling bluetooth");
   bluetoothAdapter.enable();
  }
 });
 builder.setNegativeButton(android.R.string.cancel, null);
 builder.show();
}

      

0


source







All Articles