Я использую геозону в своем приложении и на основе событий геозоны (вход или выход) я хочу выполнить какое-то действие. В документации указано, что после установки геозоны события будут запускаться автоматически, и вы сможете поймать это событие с помощью IntentService. Для этого я сделал намерение, как показано ниже:
GeofenceTransitionsIntentService.java
public class GeofenceTransitionsIntentService extends IntentService {
Handler mHandler;
public GeofenceTransitionsIntentService() {
super("GeofenceTransitionsIntentService");
mHandler = new Handler();
}
@Override
public void onCreate() {
super.onCreate();
Log.e("JK-->>","service started!");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.e("JK-->>","onHandel--->>");
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {
Log.e("JK-->>","geofenceEvent has error!");
return;
}
int geofenceTransitionType = geofencingEvent.getGeofenceTransition();
if (geofenceTransitionType == Geofence.GEOFENCE_TRANSITION_ENTER) {
Log.e("JK-->>","enter!");
mHandler.post(new DisplayToast(this,"Enter"));
} else if (geofenceTransitionType == Geofence.GEOFENCE_TRANSITION_EXIT) {
mHandler.post(new DisplayToast(this,"Exit"));
Log.e("JK-->>","exit");
}
}
public class DisplayToast implements Runnable {
private final Context mContext;
String mText;
public DisplayToast(Context mContext, String text){
this.mContext = mContext;
mText = text;
}
public void run(){
Toast.makeText(mContext, mText, Toast.LENGTH_SHORT).show();
}
}
}
Теперь проблема в том, что когда приложение открыто (независимо от переднего плана или фона), и я вхожу или выхожу из геозоны, оно работает нормально и показывает мне тост-сообщение, а logcat показывает журнал, но когда я удаляю приложение из последних приложений, тост-сообщение не отображается мне или журнал не отображается в logcat.
Я пытался найти решение в Google, но в основном все ответы предлагают использовать службу, но если я не ошибаюсь, то IntentService автоматически останавливается после выполнения работы и запускается при получении любого намерения. Итак, я думаю, что более эффективно использовать IntentService для выполнения этой задачи.
ОБНОВЛЕНИЕ Я регистрирую геозону, используя следующую строку кода.
geofencingClient.addGeofences(getGeofencingRequest(),getGeofencePendingIntent());
и в getGeofencePendingIntent() я запускаю службу намерений, используя следующую строку кода.
private PendingIntent getGeofencePendingIntent() {
if(geofencePendingIntent != null)
return geofencePendingIntent;
Intent in = new Intent(SetProfileOnlineActivity.this,GeofenceTransitionsIntentService.class);
geofencePendingIntent = PendingIntent.getService(SetProfileOnlineActivity.this,111451,in,PendingIntent.FLAG_UPDATE_CURRENT);
return geofencePendingIntent;
}
IntentService
.IntentService
не будет жить вечно, выполнив свою задачу, он остановится. Вы можете взглянуть наIntentService
Документацию. - person ADM   schedule 02.03.2018SetProfileOnlineActivity.this
это действие, не так ли? Так как же этот контекст будет жить в фоновом режиме? Я что-то пропустил здесь? - person ADM   schedule 02.03.2018Geofence
. Я просмотрел документацию. И ваш код выглядит так же. Так что продолжайте копать. Проверьте это и на других устройствах. на другом уровне API, чтобы убедиться. - person ADM   schedule 02.03.2018