Фоновые ограничения геозон для неактивных приложений на Android 9+ - PullRequest
0 голосов
/ 17 октября 2019

Я создаю приложение, которое просто регистрирует некоторые геозоны и уведомляет пользователя, когда он входит в эти геозоны.

Чтобы достичь этого, я следил за некоторыми ресурсами * и создал соответствующий код **

Код работает правильно, и приложение получает геозонууведомления даже в фоновом режиме.

Но я хотел дополнительно протестировать свое приложение на предмет "Ограничения адаптивного приложения батареи" ***, также известного как "Резервные корзины приложений", который был представлен в Android 9+, которыйразделите приложения на 4 основных сегмента в зависимости от использования пользователя.

Чтобы добиться этого, я использовал следующие команды:

adb shell dumpsys battery unplug 
adb shell am set-standby-bucket  com.polygonfence frequent

Это привело к тому, что приложение переместилось в частый пакет.

Проблема заключается в том, что всякий раз, когда я перемещаю свое приложение в редкий или частый пакет, я прекращаю получать обновления. Независимо от того, сколько раз я вхожу и покидаю забор (для входа и выхода я использую поддельное приложение gps ****)

Чтобы начать получать обновления, мне нужно было либо переместить мое приложение в (активное или работающее_сетевое) , либо повторно подключить питание

adb shell am set-standby-bucket  com.polygonfence active
adb shell dumpsys battery reset

такое поведение ожидается? Или в моем коде что-то отсутствует? или я тестирую неправильно?

Последнее замечание: на моем персональном устройстве я был удивлен, что даже youtube считается частым приложением, поэтому я не думаю, чточто мое приложение останется активным или рабочим сегментом для большинства пользователей.

ресурсы *

https://developer.android.com/training/location/geofencing

https://www.raywenderlich.com/7372-geofencing-api-tutorial-for-android

код **

class GeofenceHandler(val context: Context) {
    private val geofencingClient = LocationServices.getGeofencingClient(context)

    private val geofencePendingIntent: PendingIntent by lazy {
        val intent = Intent(context, GeofenceBroadcastReceiver::class.java)
        PendingIntent.getBroadcast(
            context,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT)
    }

    @SuppressLint("MissingPermission")
    fun add(fenceEntry: FenceEntry,
            success: (reminder: FenceEntry) -> Unit,
            failure: (error: String) -> Unit) {
        val geofence = buildGeofence(fenceEntry)

            geofencingClient
                .addGeofences(buildGeofencingRequest(geofence), geofencePendingIntent)
                .addOnSuccessListener {
                    Repo().saveFence(context ,fenceEntry )
                    success(fenceEntry)
                }
                .addOnFailureListener {
                    failure(GeofenceErrorMessages.getErrorString(context, it))
                }

    }

    private fun buildGeofence(fenceEntry: FenceEntry): Geofence {
        val latitude = fenceEntry.latLng.latitude
        val longitude = fenceEntry.latLng.longitude
        val radius = fenceEntry.radius


            return Geofence.Builder()
                .setNotificationResponsiveness(1 * 60 *1000)
                .setRequestId(fenceEntry.id)
                .setCircularRegion(
                    latitude,
                    longitude,
                    radius.toFloat()
                )
                .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER)
                .setExpirationDuration(Geofence.NEVER_EXPIRE)
                .build()


    }

    private fun buildGeofencingRequest(geofence: Geofence): GeofencingRequest {
        return GeofencingRequest.Builder()
            .setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
            .addGeofences(listOf(geofence))
            .build()
    }
}


class GeofenceBroadcastReceiver : BroadcastReceiver() {
      override fun onReceive(context: Context, intent: Intent) {
        GeofenceTransitionsJobIntentService.enqueueWork(context, intent)
      }
    }

"Ограничения использования адаптивного аккумулятора" ***

https://developer.android.com/about/versions/pie/power#buckets

https://www.youtube.com/watch?v=-7eZL3XRqas&t=256s

поддельное приложение gps ****

https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en

...