Мое приложение посвящено управлению задачами, в которых для конкретной задачи я могу назначить местоположение.Я храню эту широту и долготу местоположения в базе данных. Теперь я хочу создать географический забор во время выполнения вокруг текущего местоположения пользователей. И проверить, существуют ли эти сохраненные значения в фехтовании или нет.Если существует, я хочу отправить уведомление пользователю о том, что у вас есть задание, назначенное для этого местоположения.
В моей основной деятельности у меня есть метод create для получения значений широты из базы данных.Получить текущее местоположение и сгенерировать геозону вокруг него в 500 м. Проверьте, совпадает ли значение базы данных и текущее значение широты, если совпадает, отправьте уведомление. Для отправки уведомления я создал фоновый сервис.Теперь моя служба работает правильно и отправляет уведомления непрерывно, но когда я удаляю свое приложение из истории, я не получаю уведомления. Я пытался использовать одно сигнальное push-уведомление, но не решил мою проблему.Не открывая мою заявку, можем ли мы постоянно проверять это условие в фоновом режиме и отправлять уведомления?В фоновом режиме без открытия приложения мы можем получить доступ к значениям базы данных sqlite?
private void startGeofence() {
Log.i(TAG, "startGeofence()");
LatLng latLng = new LatLng(latitude, longitude);
Geofence geofence = createGeofence(latLng, GEOFENCE_RADIUS);
GeofencingRequest geofenceRequest = createGeofenceRequest(geofence);
arrayList = dataBaseHelper.getLatlongList();
arrayList.removeAll(Arrays.asList(" ", null));
arrayList.removeAll(Arrays.asList("", null));
Log.d(TAG, "onStart: " + arrayList.toString());
String lat = String.format("%.2f", latitude);
//String lat = String.valueOf(latitude);
for (int j = 0; j < arrayList.size(); j++) {
String first = arrayList.get(j);
String value = String.format("%.5s", first);
if (!value.equals(lat)) {
//addGeofence(geofenceRequest);
} else {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then
overriding
// public void onRequestPermissionsResult(int
requestCode, String[] permissions,
// int[]
grantResults)
// to handle the case where the user grants the
permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
geofencingClient.addGeofences(createGeofenceRequest(geofence),
getGeofencePendingIntent())
.addOnSuccessListener(this, new
OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Geofences added
Log.d(TAG, "onSuccess: successfully added");
getGeofencePendingIntent();
// ...
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to add geofences
// ...
}
});
}
}
}
private PendingIntent getGeofencePendingIntent() {
// Reuse the PendingIntent if we already have it.
if (geoFencePendingIntent != null) {
return geoFencePendingIntent;
}
Intent intent = new Intent(this,
GeofenceTrasitionService.class);
// We use FLAG_UPDATE_CURRENT so that we get the same pending
intent
back when
// calling addGeofences() and removeGeofences().
geoFencePendingIntent = PendingIntent.getService(this, 0, intent,
PendingIntent.
FLAG_UPDATE_CURRENT);
return geoFencePendingIntent;
}
if (intent != null) {
GeofencingEvent geofencingEvent =
GeofencingEvent.fromIntent(intent);
// Handling errors
if ( geofencingEvent.hasError() ) {
String errorMsg =
getErrorString(geofencingEvent.getErrorCode() );
Log.e( TAG, errorMsg );
return;
}
// Retrieve GeofenceTrasition
int geoFenceTransition = geofencingEvent.getGeofenceTransition();
// Check if the transition type
if ( geoFenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
geoFenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT )
{
// Get the geofence that were triggered
List<Geofence> triggeringGeofences =
geofencingEvent.getTriggeringGeofences();
// Create a detail message with Geofences received
String geofenceTransitionDetails =
getGeofenceTrasitionDetails(geoFenceTransition,
triggeringGeofences );
// Send notification details as a String
try {
OneSignal.postNotification(new JSONObject("{'contents':
{'en':'Test Message'}, 'include_player_ids': ['" + playerId +
"']}"), null);
} catch (JSONException e) {
e.printStackTrace();
}
Log.d(TAG, "onHandleIntent: Send Notification");
//sendNotification( geofenceTransitionDetails );
}
В фоновом режиме постоянно проверяйте местоположение базы данных и текущее местоположение, если местоположение базы данных существует в текущем расположении. Забор отправляйте уведомления также, если я удаляю приложение из истории.