Геозона не срабатывает после удаления приложения из фона (состояние приложения убито) - PullRequest
0 голосов
/ 26 марта 2019

Я использовал Geofence для отслеживания местоположения пользователя вместо услуг. Местоположение пользователя обновляется, когда приложение находится в фоновом режиме или на переднем плане. Местоположение не обновляется, когда приложение удаляется из фона (состояние отмены).

Я тестировал на устройстве -

а) LG K10 - ОС 8

b) MI - OS 7 (разрешение на автозапуск включено)

Я перешел по ссылке, указанной ниже, для обновления местоположения с использованием Geofence. 1. https://github.com/googlesamples/android-play-location/tree/master/Geofencing

2. https://codelabs.developers.google.com/codelabs/background-location-updates-android-o/index.html?index=..%2F..index#0

Добавить геозону

   @SuppressLint("MissingPermission")
   fun addOrUpdateGeofence() {
    try {
        val sessionMgmt = SessionMgmt(context)
        if (sessionMgmt.lat == "") return
        removeGeofence()
        val geofence = Geofence.Builder()
                // Set the request ID of the geofence. This is a string to identify this geofence.
                .setRequestId(geofenceId)
                // Set the circular region of this geofence.
                .setCircularRegion(sessionMgmt.lat.toDouble(), sessionMgmt.lng.toDouble(), GEOFENCE_RADIUS_IN_METERS)
                // Set the expiration duration of the geofence. This geofence gets automatically
                // removed after this period of time.
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                // Set the transition types of interest. Alerts are only generated for these
                // transition. We track entry and exit transitions in this sample.
                .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT or Geofence.GEOFENCE_TRANSITION_DWELL)
                // Create the geofence.
                .setLoiteringDelay(GEOFENCE_LOITERING_DELAY)
                .build()

        val builder = GeofencingRequest.Builder()
        // The INITIAL_TRIGGER_ENTER flag indicates that geofencing service should trigger a
        // GEOFENCE_TRANSITION_ENTER notification when the geofence is added and if the device
        // is already inside that geofence.
        builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
        // Add the geofences to be monitored by geofencing service.
        builder.addGeofence(geofence)
        // Return a GeofencingRequest.
        //    sendNotification("Adding Fence")
        mGeofencingClient.addGeofences(builder.build(), 
       getGeofencePendingIntent()).addOnCompleteListener(this)

        val location = Location("")
        location.latitude = sessionMgmt.lat.toDouble()
        location.longitude = sessionMgmt.lng.toDouble()
        val updateLocation = UpdateLocation()
        updateLocation.updateUserLocation(context, location)
        updateLocation.updateUserLocationSpanish(context, location)


    } catch (e: Exception) {
        e.printStackTrace()
    }

}

В ожидании намерения

 private fun getGeofencePendingIntent(): PendingIntent? {
    // Reuse the PendingIntent if we already have it.
    if (mGeofencePendingIntent != null) {
        return mGeofencePendingIntent as PendingIntent
    }
    val intent = Intent(context, GeofenceBroadcastReceiver::class.java)
    // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling
    // addGeofences() and removeGeofences().
    mGeofencePendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    return mGeofencePendingIntent
}

Фактический результат

Геозона не вызывает триггер, когда приложение находится в отключенном состоянии.

Фактический результат

Запускается ли геозона, когда Appliaction находится в убитом состоянии. Если да, то почему Geofence не запускается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...