Reputation: 61
Hello I am try to scan the bluetooth ble device for Android Lollipop. It is working fine but if turned off the bluetotooth an then run the App it will crash and then give the pop up to enable the bluetooth.Ideally like it should give the pop up to enable bluetooth if it is turned off.
This is the method, which 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);
}
}
code to start scan
public void handleScanStart(View view) {
foundDevices.clear();
btArrayAdapter.clear();
ble.startBleScan();
scanButton.setEnabled(false);
stopScanButton.setEnabled(true);
}
Enable Start Scan
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)
Upvotes: 3
Views: 4370
Reputation: 61
The correct approach would be before starting the scan we have to check BluetoothLeScanner object null or not like we check for BluetoothAdapter
Sample
if(bluetoothLeScanner != null){
bluetoothLeScanner.startScan(filters,settingsBuilder.build(),scanCallback);
}
Upvotes: 3
Reputation: 64941
You can tell a user that bluetooth is not enabled with a dialog, and then enable it for them when they hit OK (or do nothing if they hit Cancel) with code like this:
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();
}
Upvotes: 0