BLEデバイスを10秒間スキャンするダイアログがあります。私がスキャンを開始すると、リストのフッターにスピナーが表示されます。スキャンが完了したら、そのスピナーを削除したいと思います。私はこれは、デバイスがバージョン21以上を実行していないかのように、新しいstartScan/stopScan関数の代わりに非推奨のmBluetoothAdapter.stopLeScan(コールバック)関数を使用するようにしています。このメソッドにフォールバックする必要があります。Android BLE LeScanCallback停止時に取得する
stopLeScanにはstartLeScanと同じコールバックが必要ですが、コールバックが作成されているとは思われません。 BluetoohDeviceがヌルであったかどうかを調べるための単純なチェックであることを期待していましたが、スキャンが停止されたためにコールバックが行われましたが、これは機能しませんでした。
旧バージョンのSDKでは、適切なデバイスが見つかったか、スキャン時間が完了したためにスキャンが停止したときにどのようになりましたか?私は私のscanLeDevice関数に別のハンドラを渡すことができますが、私はすでにコールバックを渡しているので、ちょっとばかげているようです。ダイアログボックスで
がのBluetoothスキャナ
public class BleDevice {
private final static String TAG = BleDevice.class.getSimpleName();
// Stops scanning after 10 seconds.
private static final long SCAN_PERIOD = 10000;
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;
public BleDevice() {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mHandler = new Handler();
}
public void scanLeDevice(final boolean enable, final BluetoothAdapter.LeScanCallback callback) {
if (enable == true && mScanning == false) {
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// Turn off scanning
scanLeDevice(false, callback);
}
}, SCAN_PERIOD);
mScanning = true;
mBluetoothAdapter.startLeScan(callback);
Log.d(TAG, "Starting Bluetooth LE scan");
} else if(enable == false && mScanning == true) {
mScanning = false;
mBluetoothAdapter.stopLeScan(callback);
Log.d(TAG, "Stopped Bluetooth LE scan");
}
}
}
コールバック:callback
mBluetoothAdapter.stopLeScan(callback);
で
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
Log.d(TAG, device.getAddress() + " " + device.getName() + "");
if(device == null) {
Log.d(TAG, "Device is null? stop?");
} else {
btAdapter.add(device);
}
}
};
情報ありがとうございました。私はオブザーバーパターンを使用して終了し、自分のコールバックを作成しました –