2016-09-20 13 views
0

私のBluetoothアプリケーションに関する問題があります。アプリを起動する前にBluetoothを有効にすると、すべて正常に動作します。しかし私がそうしないと、私のアプリはturnOnメソッドでBluetoothを有効にする許可を求めます。私は私のonScanボタンを押すと、しかし、私はエラーが述べ得る:BluetoothLeScanner nullオブジェクトリファレンス

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(); 
} 

私QUESは、BTScannerは、ターンオンメソッドが呼び出される前に行われつつあるということである。

ここ
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.bluetooth.le.BluetoothLeScanner.startScan(android.bluetooth.le.ScanCallback)' on a null object reference 

は私のonCreateメソッドですBTScannerはnullオブジェクトです。

この問題に関する助けがあれば、大いに役立ちます。

敬具、

Binsento

+0

'BTScanner'を割り当てる前に' turnOn() 'を呼び出そうとしましたか? – DigitalNinja

+0

はい、私はまた、bluetoothadapter.isEnabledがbluetooothlescannerになったときにifステートメントを実行しようとしました。しかし、どちらもうまくいきませんでした。 –

答えて

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に準拠するように更新する必要があります。私はそれをする時間を割いていない。

+0

BluetoothAdapterに何も問題はありませんが、BluetoothLeScannerは次のように呼び出されます。BTScanner = BTAdapter.getBluetoothLeScanner(); –

+0

'BTAdapter'がnullであるため、あなたの' BTScanner'オブジェクトがヌルでないことを確認してください。言い換えれば、実際に 'BTAdapter'を持っているかどうかをチェックすることなく、直ちに' BTScanner = BTAdapter.getBluetoothLeScanner();を呼び出すことができます。 – DigitalNinja

+0

これは私が上記のコードであなたを見せようとしていたものです。 – DigitalNinja

関連する問題