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
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 to share