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}")
}

Ответы (0 шт):