2016-09-20 182 views
0

我的蓝牙应用程序有问题。在启动应用程序之前启用蓝牙时,一切正常。但是当我不这样做时,我的应用程序会要求允许通过turnOn方法启用蓝牙。但是,当我按下开启扫描按钮,我得到一个错误,指出:BluetoothLeScanner空对象引用

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由前所述开启方法被调用,使得BTScanner是一个空对象。

任何关于这个问题的帮助都会很大。

亲切的问候,

Binsento

+0

您是否在分配'BTScanner'之前尝试调用'turnOn()'? – DigitalNinja

+0

是的,我也做过,当bluetoothadapter.isEnabled制作bluetooothlescanner时,我也试过对if语句做些什么。但两者都不起作用。 –

回答

0

试试这个(从我的一个项目采取):

类变量:

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。我没有花时间这样做。

+0

我的BluetoothAdapter没有问题,但是使用我的BluetoothLeScanner调用:BTScanner = BTAdapter.getBluetoothLeScanner(); –

+0

请检查您的'BTScanner'对象是否为空,因为您的'BTAdapter'为空。换句话说,你立即调用'BTScanner = BTAdapter.getBluetoothLeScanner();'而不检查你是否真的有一个'BTAdapter'。 – DigitalNinja

+0

这就是我试图用上面的代码展示给你的东西。 – DigitalNinja

相关问题