0

IBeacons (これらは BLE デバイスです) を見つけて検出し、(RSSI 値に応じて) 距離を測る Android アプリケーションを作成しています。 html

しかし、このコードは、私の Android デバイス (Samsung Galaxy S3 および LG G3) では動作が異なります。

私の S3 では、「onLeScan」コールバックがループ内で何度も発生し (毎秒約 5 回)、範囲に応じて毎回異なる RSSI 値が返されます。

しかし、私の LG G3 では、「onLeScan」コールバックは、スキャンを開始したときに 1 回だけ発生します。したがって、新しい RSSI 値を取得したい場合は、スキャンを再開する必要があります。そして、それはあまり良くないと思います。

LG G3 ドライバーに問題があるのか​​、Android の設定を確認する必要があるのか​​わかりません。誰でもそれについて何か教えてもらえますか?

ここに私のコードがあります:

public class Main2Activity extends Activity implements BluetoothAdapter.LeScanCallback {

private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    /**/
    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();
    if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        enableBtIntent.addFlags(enableBtIntent.FLAG_ACTIVITY_NEW_TASK);
        this.startActivity(enableBtIntent);

    }   
    scanLeDevice(true);
}

private void scanLeDevice(final boolean enable) {
    if (enable) {
        // Stops scanning after a pre-defined scan period.
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScanning = false;
                mBluetoothAdapter.stopLeScan(Main2Activity.this);
            }
        }, 30000);

        mScanning = true;
        mBluetoothAdapter.startLeScan(Main2Activity.this);
    } else {
        mScanning = false;
        mBluetoothAdapter.stopLeScan(Main2Activity.this);
    }
}

ArrayList<String> datas = new ArrayList<String>();
@Override
public void onLeScan(BluetoothDevice arg0, int arg1, byte[] arg2) {
    // TODO Auto-generated method stub
    datas.add( arg2.toString() );
}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return super.onOptionsItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    return true;
}
4

2 に答える 2