Я пытаюсь получить 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 ().