BluetoothLeScanner null对象引用

时间:2016-09-20 20:17:59

标签: android bluetooth bluetooth-lowenergy

我的蓝牙应用有问题。当我在启动应用程序之前启用蓝牙时,一切正常。但是当我不知道时,我的应用会通过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

2 个答案:

答案 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();

然后解决它。