GeoFence с помощью PendingIntent.getBroadcast () не работает - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь получить Geofence триггер для BroadcastReceiver, и BroadcastReceiver имеет код для чтения данных из намерения и действия с данными, отправленными в намерении.Мой BroadCastReceiver - GeoLocationBroadCastReceiver.Я вызываю этот код, когда моя активность открыта и приложение находится в фоновом режиме.

public PendingIntent getPendingIntent(Context context){
   Intent i = new Intent(context, GeoLocationBroadCastReceiver.class);
   return PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
}

Этот PendingIntent передается методу addGeofences вместе с GeofencingRequest.Builder (эти данные возвращаются в addGeoFenceметод).

GeofencingClient client = LocationServices.getGeofencingClient(context);
 client.addGeofences(addGeoFence(100, lat, long, true), getPendingIntent(context))
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.e(TAG,"Added from location geofence");
                    }
                });

Когда я вызываю вышеуказанный код, геозона успешно добавляется.

Объявление получателя в файле Manifest.xml:

 <receiver
        android:name=".LocationMagic.GeoLocationBroadCastReceiver"
        android:enabled="true"
        android:exported="true"/>

Проблема:Я не получаю трансляцию и получатель не вызывается.Я вижу, что предлагаемый Google подход заключается в том, чтобы использовать трансляцию для преодоления фоновых ограничений служб.Я также знаю ограничения на вещание (в белом и черном списках).Но в соответствии с Google CodeLabs предложенный подход заключается в использовании трансляции.Ссылка в лаборатории кодов Google здесь .

Из кодов Google:

Приложения с таргетингом на O дополнительно ограничены службами, запущенными в фоновом режиме.По этой причине приложения, ориентированные на O, не должны использовать PendingIntent.getService () при запросе обновлений местоположения.Вместо этого они должны использовать PendingIntent.getBroadcast ().

...