Android:如何停止基于意图的蓝牙扫描?

问题描述 投票:0回答:1

我被这个问题困扰了很长时间,也查了很多文章,但仍然没有找到解决方案。您能给我一些指导吗?

我正在使用基于意图的蓝牙扫描在后台持续运行,实验结果非常好(我可以在BroadcastReceiver的

onReceive
方法中正确接收蓝牙列表,并且可以长时间运行时间)。

但是!当我尝试使用

stopScan
停止扫描时,起初我以为它正常停止,但过了一会儿,在不打开应用程序的情况下,我再次收到扫描结果。

到底发生了什么?为什么尽管调用了

stopScan
,但仍然收到结果?

我在蓝牙部分使用了原生 SDK 和 Android-Scanner-Compat-Library。下面是 Android-Scanner-Compat-Library。

我不确定所提供的信息是否足以识别问题。 如果您需要我提供任何其他内容,请告诉我。

    <receiver
        android:name=".BluetoothReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="BluetoothDevice.ACTION_FOUND" />
        </intent-filter>
    </receiver>
    private fun startBluetoothLeScanIntent() {

        val filters = ArrayList<ScanFilter>()

        val filter = ScanFilter.Builder()
             .setServiceUuid(ParcelUuid(UUID.fromString(UUID_STRING)))
             .build()
        
        filters.add(filter)

        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
            .build()

        val intent = Intent(requireContext(), BluetoothReceiver::class.java)
        intent.putExtra("test", "")
        
        pendingIntent = PendingIntent.getBroadcast(requireContext(), 0, intent, FLAG_UPDATE_CURRENT or FLAG_MUTABLE)

        BluetoothLeScannerCompat.getScanner().startScan(
            filters,
            settings,
            requireContext(),
            pendingIntent,
            0
        )
    }
    private fun stopBluetoothLeScanIntent() {
        BluetoothLeScannerCompat.getScanner().stopScan(requireContext(), pendingIntent, 0)
    }
class BluetoothReceiver : BroadcastReceiver() {
    companion object {
        private val TAG = BluetoothReceiver::class.simpleName
    }

    override fun onReceive(context: Context, intent: Intent) {
        val hasBleExtra = intent.hasExtra(BluetoothLeScannerCompat.EXTRA_CALLBACK_TYPE)

        if (hasBleExtra) {
            val bleCallbackType =
                intent.getIntExtra(BluetoothLeScannerCompat.EXTRA_CALLBACK_TYPE, -1)

            if (bleCallbackType != -1) {
                // ...
            }
        }
    }
}
android bluetooth bluetooth-lowenergy android-bluetooth
1个回答
0
投票

看起来像是库的一个错误。尝试取消注册您的广播接收器,例如

unregisterReceiver(BluetoothReceiver);

© www.soinside.com 2019 - 2024. All rights reserved.