Мне удалось внедрить фоновые обновления местоположения, используя FusedLocationProviderClient PendingIntent и BroadcastReceiver в моем классе MainActivity, но при перезапуске телефона я не могу снова запустить его.
Я добавил
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
и
<receiver
android:name=".LocationBroadcastReceiver"
android:exported="true"
android:enabled="true"
android:permission="com.x.location.LOC_PERMISSION">
<intent-filter>
<action android:name="com.x.location.LocationUpdatesBroadcastReceiver.ACTION_UPDATE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
уже и с этим он вызвал мой LocationUpdatesBroadcastReceiver:
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
// Can see it coming through here then I
// request location updates - see code below
}
но когда я снова пытаюсь запросить обновления местоположения, он просто ничего не делает. Это в значительной степени код, который я использовал для запроса обновлений местоположения снова:
private void requestLocationUpdates(Context context) {
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
LocationRequest request = new LocationRequest();
long millis = 15 * 60 * 1000;
request.setInterval(millis);
request.setFastestInterval(millis);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
request.setMaxWaitTime(millis);
Intent intent = new Intent(context, LocationBroadcastReceiver.class);
intent.setAction(LocationBroadcastReceiver.ACTION_DISTANCE_UPDATE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
fusedLocationClient.requestLocationUpdates(request, pi);
}
Я попробовал приведенный выше код как в LocationUpdatesBroadcastReceiver, так и в запуске службы, но все равно не повезло.
Также попытался изменить код запроса на другой номер, чтобы он не конфликтовал с первым, который я использовал внутри MainActivity, и / или также изменил флаг на PendingIntent.FLAG_CANCEL_CURRENT, но все тот же.
Заранее спасибо.