我的蓝牙应用有问题。当我在启动应用程序之前启用蓝牙时,一切正常。但是当我不知道时,我的应用会通过turnOn方法请求允许启用蓝牙。但是当我按下我的onScan按钮时,我收到一条错误说明:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(android.bluetooth.le.ScanCallback)' on a null object reference
这是我的onCreate方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Set layout
setContentView(R.layout.activity_main);
//Bluetooth
// BluetoothManager
final BluetoothManager BTManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BTAdapter = BTManager.getAdapter();
// BluetoothLescanner
BTScanner = BTAdapter.getBluetoothLeScanner();
//Turn on BT
turnOn();
//Ask permission for location.
requestPermission();
}
我的问题是,BTScanner是在调用turnOn方法之前制作的,这使得BTScanner成为一个空对象。
关于这个问题的任何帮助都会很大。
亲切的问候,
Binsento
答案 0 :(得分:1)
试试这个(取自我的一个项目):
类变量:
private BluetoothAdapter mBtAdapter = null;
内部onCreate
:
final BluetoothManager btManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBtAdapter = btManager.getAdapter();
checkBt(); // called at the end of onCreate
checkBt()
方法:
private void checkBt() {
if (mBtAdapter == null || !mBtAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
}
然后从那里开始"扫描"单击按钮:
public void onScanButton(){
if (mBtAdapter.isEnabled()){
scanLeDevice(true);
}
}
然后scanLeDevice
调用mBtAdapter.startLeScan(mLeScanCallback);
注意:其中一些现已弃用,但可以更新以符合新API。我没有花时间去做那件事。
答案 1 :(得分:0)
我面临同样的问题,它让我困扰了很长时间,今天我解决了。
设备:华为nonor 8
当我打电话
sLeScanner.stopScan(scanCallback);
sLeScanner.startScan(scanCallback);
我得到了NullPointerException,根本原因是 - sLeScanner == null。
在开始|停止扫描之前,只需添加以下代码:
if (sLeScanner == null) sLeScanner = sBluetoothAdapter.getBluetoothLeScanner();
然后解决它。