Я пытаюсь сканировать маяки, используя startScan (фильтры, настройки, callbackIntent) . У меня есть реализация, которая отлично работает для Sony Xperia XZ и Nexus 5X. Единственное другое устройство с Android O, которое у меня есть, это Samsung Galaxy S8, и то, что работает для других устройств, на Samsung ничего не дает. (Сканирование Bluetooth действительно встроено в библиотечный модуль, но даже при создании фиктивного приложения samsung не работает, поэтому я буду использовать это в этом примере). Я удалил фильтр и настройки, использованные для startScan
, так как сканирование без них все равно не работает, и это не обязательно.
MainActivity
- checks and asks for permissions (ACCESS_COARSE_LOCATION)
- simplified onStart
override fun onStart() {
super.onStart()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val startScan = bleScanner.startScan(null, null, getPendingIntent())
Log.d("testApp", "Start scan! ${startScan == 0}")
}
}
PendingIntent:
private fun getPendingIntent(): PendingIntent {
return PendingIntent.getBroadcast(
this, REQ_CODE,
Intent(this.applicationContext, BleReceiver::class.java),
PendingIntent.FLAG_UPDATE_CURRENT)
}
Manifest
Разрешения:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Получатель:
<receiver android:name="com.testapp.samsungoscan.BleReceiver" >
<intent-filter>
<action android:name="BluetoothDevice.ACTION_FOUND" />
<action android:name="BluetoothDevice.EXTRA_UUID" />
<action android:name="BluetoothDevice.EXTRA_RSSI" />
</intent-filter>
</receiver>
Реализация получателя:
class BleReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.e("testApp", "On Receive!")
}
}
Так! Почему это не работает для Samsung, а работает для Sony и Nexus?
Примечание: если я заменю приемники android:name
на относительный путь .BleReceiver
вместо com.testapp.samsungoscan.BleReceiver
, то Nexus перестанет работать, но Sony все еще работает!
Под работой я подразумеваю, что все классы используются и журналы запускаются.
Что не так?