Я читаю документацию отсюда.
https://developer.android.com/training/location/geofencing
Он может обновлять мое местоположение для моей геозоны, когда я запускаю эту службу. Проблема в том, что мне нужно постоянно контролировать. Итак, я думаю сделать таймер в своем сервисе и регулярно проверять свою геозону. Но, думаю, точно разрядит батарею.
Я не хочу отслеживать местоположение, и вместо этого мне нужна ОС Android, чтобы обновлять меня, входит ли пользователь в мою геозону, как iOS. Есть ли способ реализовать это?
public class GeofenceTransitionsIntentService extends IntentService {
// ...
protected void onHandleIntent(Intent intent) {
GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
if (geofencingEvent.hasError()) {
String errorMessage = GeofenceErrorMessages.getErrorString(this,
geofencingEvent.getErrorCode());
Log.e(TAG, errorMessage);
return;
}
// Get the transition type.
int geofenceTransition = geofencingEvent.getGeofenceTransition();
// Test that the reported transition was of interest.
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {
// Get the geofences that were triggered. A single event can trigger
// multiple geofences.
List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();
// Get the transition details as a String.
String geofenceTransitionDetails = getGeofenceTransitionDetails(
this,
geofenceTransition,
triggeringGeofences
);
// Send notification and log the transition details.
sendNotification(geofenceTransitionDetails);
Log.i(TAG, geofenceTransitionDetails);
} else {
// Log the error.
Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
geofenceTransition));
}
}
Где мне создать геозону? По основному виду деятельности или услуге? Это потому, что пользователь может убить приложение.
Я не уверен в рабочем процессе вашего приложения. Но, возможно, вы сможете создать геозону при запуске вашего приложения. Как только вы создадите геозону, вы получите уведомление, даже если пользователь убьет приложение.
Ах хорошо. Дай мне попробовать. есть одна вещь, которую я не понимаю. Мне нужно запускать GeofenceTransitionsIntentService? Или mGeofencingClient будет автоматически вызывать GeofenceTransitionsIntentService?
Вам не нужно запускать GeofenceTransitionsIntentService. Вам необходимо указать эту услугу при создании Geofence. Geofence вызовет для вас сервис.
Вам не нужно постоянно следить за геозоной. Создайте геозону и расслабьтесь, Geofence уведомит вас, когда вы окажетесь в зоне геозоны.