android - Android蓝牙低功耗回调(LeScanCallBack)在单独的线程上?

标签 android multithreading bluetooth callback

我正在MainActivity中启动蓝牙低功耗扫描:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        BLEScanner.start(bluetoothManager.getAdapter());
    }
}

(静态)BLEScanner类如下:
public class BLEScanner {    
    public static void start(final BluetoothAdapter bluetoothAdapter) {
        bluetoothAdapter.startLeScan(mLeScanCallback);
    }

    private static BluetoothAdapter.LeScanCallback mLeScanCallback =
            new BluetoothAdapter.LeScanCallback() {
                @Override
                public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
                    String name = device.getName();
                    String address = device.getAddress();
                    Log.d("BLESCANNER", name+" "+address);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
}

BLEScanner中的Thread.sleep()导致UIThread无响应。如何在单独的类中运行BLEScanner类?

最佳答案

private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
            @Override
            public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //The code here is executed on on new thread everytime 
                        Log.e("LeScanCallback", Thread.currentThread().getName());//Prints Thread-xxxx
                    }
                }).start();
            }
        };

关于android - Android蓝牙低功耗回调(LeScanCallBack)在单独的线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29429321/

相关文章:

ListView 中的 Android 广告展示位置

Android场景转场: Custom interpolator?

android - HttpURL连接 : what does setFixedLengthStreamingMode() want the size of?

android - 在 Android manifest 中,如何要求两个硬件中的至少一个?

ios - GKSession 将获取后台其他设备的对等 ID

java - 汉堡图标不显示?

c++ - 跨线程从 QML 调用 QObject 函数

c# - "Double-Checked Locking is Broken"是仅限 Java 的东西吗?

c# - 将 ThreadPool 与回调一起使用

bluetooth - hcitool 无需配对即可显示iOS13的公网Mac地址