1

Я работаю над Местоположение и Geo Fencing. Но я видел пару проблем. Я думаю, что у меня что-то не хватает, но у меня много недоразумений в отношении сервисов Geo Fencing и Location, таких как API Fused Location.GeoFencing Best Stratigies

Что я делаю

По моему сценарию App, я должен получить местоположение пользователя (который я получаю, используя Fused Location API), а также у меня есть спросить у пользователя, что его предназначение, и пусть говорят, что он находится на точке а, и он выбирает Место F. Теперь я хочу, чтобы Мое приложение должно сообщить ему, что он прибыл в точке F.

Проблемы и Путаница:

  1. Я оповещен (через мой УВЕДОМЛЕНИЯ), что я приехал только в пункт назначения, и только если я вхожу в свое приложение. похоже, что мое местоположение не обновило google до моего текущего местоположения. так что лучше всего, если приложение близко или на заднем плане Google по-прежнему отслеживает его

  2. Что я делаю, это создание географа вокруг цели пользователя. Теперь я не знаю, какой способ Google отслеживать пользователя. ? не могли бы вы, пожалуйста, очистить меня, что после создания гео-забора, как Google отслеживает нас?

  3. Должен ли я реализовать какую-либо вещь в сервисе, чтобы моя служба работала, если мое приложение находится в фоновом режиме или даже мое приложение закрыто?

Я думаю, что я спокойно говорю о своем вопросе, что я хочу. Пожалуйста, поделитесь своими взглядами, а также расскажите мне, как Google отслеживает нас, когда мы задерживаем какое-либо местоположение?

Я следую за this, чтобы создать геозонность.

Пожалуйста, опишите свои взгляды.

+0

прочитайте официальный документ –

ответ

0

Вы должны зарегистрировать геозонность или GEOFENCE_TRANSITION_DWELL с координатой цели (место F).

В вашей деятельности/Фрагмент OnCreate вы должны создать Api клиент:

mGoogleApiClient = new GoogleApiClient.Builder(this) 
             .addConnectionCallbacks(this) 
             .addOnConnectionFailedListener(this) 
             .addApi(LocationServices.API) 
             .build(); 

Также не забудьте подключить/отключить:

protected void onStart() { 
    mGoogleApiClient.connect(); 
    super.onStart(); 
} 

protected void onStop() { 
    mGoogleApiClient.disconnect(); 
    super.onStop(); 
} 

Тогда в onConnected вы должны сделать следующее:

LocationServices.GeofencingApi.addGeofences(mGoogleApiClient, 
              geofenceRequest, 
              pendingIntent) 

Вы должны только добавить Geofence один раз.

Где geofenceRequest построен с использованием GeofencingRequest.Строитель:

geofenceRequest = new GeofencingRequest.Builder().addGeofence(yourGeofence).build() 

Где yourGeofence и pendingIntent:

yourGeofence = new Geofence.Builder()....build(); // Here you have to set the coordinate of Place F and GEOFENCE_TRANSITION_ENTER/GEOFENCE_TRANSITION_DWELL 
pendingIntent = PendingIntent.getService(this, 
             (int)(System.currentTimeMillis()/1000), 
             new Intent(this, GeofenceTransitionsIntentService.class), 
             PendingIntent.FLAG_UPDATE_CURRENT); 

Где GeofenceTransitionsIntentService может быть как:

public class GeofenceTransitionsIntentService extends IntentService { 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent); 

     if (!geofencingEvent.hasError()) { 
      int geofenceTransition = geofencingEvent.getGeofenceTransition(); 
      if (geofenceTransition != -1) { 
       List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences(); 
       if (triggeringGeofences != null && triggeringGeofences.size() > 0) { 
        Geofence geofence = triggeringGeofences.get(0); 
        // Do something with the geofence, e.g. show a notification using NotificationCompat.Builder 
       } 
      } 
     } 
    } 
} 

Не забудьте зарегистрировать эту услугу в манифесте:

<service android:name=".GeofenceTransitionsIntentService"/> 

GeofenceTransitionsIntentService.onHandleIntent() будет вызываться, даже если приложение закрыто.

Надеюсь, что это поможет.

+0

Спасибо за подробную информацию! когда _mGoogleApiClient.disconnect(); _ называется остановкой слежения GPS (мы можем видеть это в уведомлении). Поэтому мы никогда не знаем, когда Google Play, как часто обновлять местоположение пользователя, я думаю, нам нужно работать с GCMnwmanager/Jobschedular api, чтобы обновить триггер местоположения на каждые 30 секунд или 1 мин, чтобы получить обновление местоположения, чтобы запустить триггер Geofence, любые предложения от вас? –

+1

Я не видел документального способа узнать или изменить частоту, это обрабатывается ОС, и я думаю, вы должны полагаться на нее. Если этого недостаточно для вашего случая использования, то я думаю, вы не должны использовать API Geofencing и делать это вручную, используя фоновый сервис, который должен запрашивать местоположение пользователя, остерегайтесь, что это, вероятно, убьет вашу батарею телефона. – fernandospr