Одна вещь, которую вы можете сделать, это использовать метод LocationManager
requestLocationUpdates () с ожидающим аргументом намерения . Если вы используете API версии 8 или более поздней, то поставщиком местоположения, который вы хотите использовать, является PASSIVE_PROVIDER
, поэтому вы получаете обновления только тогда, когда другие действия обновляют их.
Вам не нужно использовать BroadcastReceiver в этой ситуации, так как PendingIntent вызывается при каждом изменении местоположения.
Подводя итог, вот как вы могли бы реализовать это
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Intent intent = new Intent(this, PassiveLocationActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, 0);
locationManager.requestLocationUpdates(
LocationManager.PASSIVE_PROVIDER, 1000, 10.0f, pendingIntent);
и убедитесь, что вы добавили разрешение в свой манифест
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
ПРЕДУПРЕЖДЕНИЕ: выполнение подобных действий может очень обременительно для батареи. Убедитесь, что вы установили вменяемые значения для minTime
и minDistance
, и звоните locationManager.removeUpdates(pendingIntent);
, когда вам больше не нужны обновления.