Geofence API: На девайсах Samsung Galaxy s10e не приходят данные о том, что пользователь пересек геозону, с чем это связано?
На Samsung Galaxy s10e (Android 9 и Android 10) бродкаст ресивер никогда не получает данные о том, что пользователь пересек геозону, хотя на других девайсах все работает (тестили на Samsung a50, Samsung s8, Samsung s9 и др.). Пробовали выключать оптимизацию батареи, но даже в foreground ничего не происходит. По логам видно, что GeofencingClient успешно добавляет все локации. Возможно кто-то сталкивался с такой проблемой?
private fun buildChildGeofencingRequest(geofences: List<Geofence>): GeofencingRequest? {
return if(geofences.isNotEmpty()) {
GeofencingRequest.Builder()
.addGeofences(geofences)
.build()
} else null
}
private val geofencePendingIntent: PendingIntent by lazy {
val intent = Intent(context, GeofenceBroadcastReceiver::class.java)
PendingIntent.getBroadcast(
context,
0,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
}
private fun buildGeoFence(geofence: GeofenceModel, type: GeoFenceType): Geofence? {
val latitude = geofence.lat
val longitude = geofence.lng
val radius = geofence.radius
val builder = Geofence.Builder()
.setRequestId(geofence.id)
.setCircularRegion(
latitude,
longitude,
radius.toFloat()
).setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
return builder.build()
}
MainActivity
val geofencesRequest: GeofencingRequest? = {
val geofences = mutableListOf<Geofence>()
filteredGeofences.forEach { model ->
//Build Geofence for each Geofence models.
val geofence = buildGeoFence(model, GeoFenceType.CHILD)
if (geofence != null) {
geofences.add(geofence)
}
}
buildChildGeofencingRequest(filteredGeofencesWithParent)
}()
if(geofencesRequest != null) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
geofencingClient
.addGeofences(geofencesRequest, geofencePendingIntent)
.addOnSuccessListener {
Log.d("Child Geofence", "Geofence Added Successfully ${filteredGeofences.map { "${it.id}, " }}")
}
.addOnFailureListener {
context.clearPresenceData()
Log.d("Child Geofence", "Geofence Addition Failed ${it.message}")
}
}
}
GeofenceBroadcastReceiver
class GeofenceBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val geofencingEvent = GeofencingEvent.fromIntent(intent)
handleEvent(geofencingEvent, context)
}
private fun handleEvent(event: GeofencingEvent, context: Context) {
//Child geofence Enter event
if (event.geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER) {
Log.d("GEO","USER ENTERED ${event.triggeringGeofences}")
}