deviceplug / btleplug

Rust Cross-Platform Host-Side Bluetooth LE Access Library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Android StartScan call can throw unhandled NullPointerException

qdot opened this issue · comments

commented

Finally got a logcat from someone seeing crashes on Android when trying to start a bluetooth scan.

03-25 09:45:12.943 27456 27563 F ntiface_centra: thread.cc:2477] No pending exception expected: 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
03-25 09:45:12.943 27456 27563 F ntiface_centra: thread.cc:2477]   at void com.nonpolynomial.btleplug.android.impl.Adapter.startScan(com.nonpolynomial.btleplug.android.impl.ScanFilter) (Adapter.java:9)
03-25 09:45:12.943 27456 27563 F ntiface_centra: thread.cc:2477] 
0

It looks like something in this line is causing this issue:

BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner().startScan(filters, settings, this.callback);

Most likely, getDefaultAdapter() is returning null here for some reason, but I'm not sure why. Unfortunately, since our Android code runs without a context, we can't check for system service status before trying this either.

At minimum, we should at least check for null on both the adapter and scanner objects, and throw with a relevant message. Ideally though, it'd be nice to figure out why we're not able to fetch an adapter here.

Sorry to hijack the thread. How do you setup the android permissions?
I've got the startscan working on desktop, but android nothing happens for me. And android never asked for Bluetooth permission.