我被这个问题困扰了很长时间,也查了很多文章,但仍然没有找到解决方案。您能给我一些指导吗?
我正在使用基于意图的蓝牙扫描在后台持续运行,实验结果非常好(我可以在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) {
// ...
}
}
}
}
看起来像是库的一个错误。尝试取消注册您的广播接收器,例如
unregisterReceiver(BluetoothReceiver);