Я пишу приложение, которое должно использовать геообслуживание, когда кто-то входит или выходит из нескольких сайтов в течение всего срока службы установленного приложения.
Моя реализация геопостановки (очень похожая на вторую ссылку ниже) работает нормально, когда я впервые устанавливаю приложение, как при перемещении в/из геообъектов, так и при использовании макетных мест для имитации его, пока устройство не перезагрузится,
При перезагрузке ни макет местоположений, ни физическое перемещение в геофотоснимке и из нее не будет вызвано событием и не вызовет ожидающего намерения мой широковещательный приемник.
Я просмотрел следующие три ссылки и также прочитал довольно много документа, но я не могу найти окончательного ответа на это в любом месте, где прямо указано, что зарегистрированные геопространства сохраняются или не сохраняются после перезагрузки.
Это ссылки, которые я просмотрел при переполнении стека: Являются ли Android-геофорумы выжившими после перезагрузки?
Android Geofence в конечном итоге перестает получать намерения перехода
Если кто-то знает ответ на вопрос, будут ли они стоять после перезагрузки или работать, если они этого не сделают, это будет очень признательно! Моя последняя надежда в настоящее время состоит в том, чтобы создать слушателя для BOOT_COMPLETED и перерегистрировать их при запуске, но id предпочитает делать это только в случае крайней необходимости.
Большое спасибо!
Изменить: пока я не нашел окончательного (в письменном виде) ответа, я уверен, что то, что опубликовал г-н ТониК, является правильным и решил использовать это решение. Большое спасибо TonyC!
В случае, если кто-то захочет увидеть решение, которое у меня есть, я прослушиваю полное действие загрузки при загрузке устройства, а затем перерегистрирую все необходимые геолокации.
Это в манифесте:
<!-- Listen for the device starting up -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name="com.YOUR.PACKAGE.geofence.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
а затем создайте для него широковещательный приемник, который будет перерегистрировать геозоны при загрузке:
package com.YOUR.PACKAGE.geofence;
import android.app.PendingIntent.CanceledException;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.WakefulBroadcastReceiver;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.location.Geofence;
public class BootCompleteReceiver extends WakefulBroadcastReceiver
{
private static final String TAG = "BootCompleteReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
//Do what you want/Register Geofences
}
}
Также стоит отметить, что если вы находитесь в геофунте при загрузке, это обычно приведет к запуску геозонности в ожидании намерения после регистрации геозонности.
Итак, если, например, geofence запускает приложение, то при загрузке устройства, которое находится в геофоруме, оно также откроет приложение, как только получатель полного вещания для загрузки зарегистрирует геозонность, и службы определения местоположения где вы находитесь.
Надеюсь, это какая-то помощь кому-то.