2014-04-07 3 views
7

Я пытаюсь проверить функциональность Geofence с помощью Google's example: Creating & Monitoring Geofences. Я загрузил code here.Не вижу Geofence Переходы в учебнике Google по Geofencing

Проблема в том, что я никогда не получаю уведомление о въезде или выезде. У меня есть Wi-Fi, 4G и GPS. Я попытался протестировать следующим образом:

  1. Я даже выхожу из своего дома примерно на 50 футов и снова ухожу, но никаких уведомлений. Я вижу, что игровые сервисы подключаются, и даже запускается "GeofenceUtils.ACTION_GEOFENCES_ADDED in MainActivity.java", поэтому я думаю, что Geofences добавляются правильно.
  2. Включил Mock Locations в настройках и использовал это Fake GPS App и изменил местоположение - начиная с тех же координат, что и Geofence1, а затем установил что-то совершенно вне (в другом состоянии), но я до сих пор не получаю уведомление о выходе.

Что я делаю неправильно? У каждого был успех при запуске этого Google's example: Creating & Monitoring Geofences. Я загрузил code here для удобства просмотра.

Я просто пытаюсь изучить Geofencing - обнаружение записи & выход. Я МАРКИРУЕМ любой ответ как правильный ответ, который я могу использовать, чтобы получить Geofencing РАБОТАТЬ НА МОЕМ РЕАЛЬНОГО УСТРОЙСТВА

I enter the coordinates and radius below.

+1

На самом деле есть ошибка в коде образца андроида. Вы не должны использовать класс IntentService для уведомления и перехода. Замените его на BroadCastReceiver. Тот же выпуск размещен здесь: http://stackoverflow.com/questions/19505614/android-geofence-eventually-stop-getting-transition-intents – Pankaj

+0

Можете ли вы рассказать мне, как вы решили эту проблему? – Hunt

+0

Я этого не сделал, и поэтому я не ответил на этот вопрос как правильный ответ. Мне нужно пересмотреть это в какой-то момент ... извините. Если вы найдете способ, было бы здорово, если вы можете отправить решение, пожалуйста. – user1406716

ответ

0

Первоначально мой код работал бесперебойно, но после этого я тоже получаю эту проблему. Попробуйте это, изменив класс geofenceRequester в функции continueAddGeofences(). в основном это звонит приемник через метод запроса местоположения

private void continueAddGeofences() { 


      // Get a PendingIntent that Location Services issues when a geofence 
      // transition occurs 
      mGeofencePendingIntent = createRequestPendingIntent(); 

      // Send a request to add the current geofences 
      mLocationClient.addGeofences(mCurrentGeofences, mGeofencePendingIntent, 
        this); 
      //mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

      try { 
       LocationRequest locationrequest = LocationRequest.create(); 
       locationrequest.setPriority(locationrequest.PRIORITY_HIGH_ACCURACY); 
       locationrequest.setInterval(3000); 


       mLocationClient.requestLocationUpdates(locationrequest, mGeofencePendingIntent); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
+0

Я получил уведомление один раз, но не смог его снова получить. Как вы тестируете приложение? Используете ли вы приложение с макетными местоположениями или фактически уходите от координат геоцентричности? Как далеко вы уходите? – user1406716

+0

Я на самом деле ухожу от геофунтовых кудайнов и уходит, зависит от радиуса, который вы дали, я дал радиус 10 м. – Priya

+0

- это радиус, подходящий для вас 5 м или 10 м? и когда вы ходите и выходите - вы видите отдельные уведомления, показывающие вход и выход ???? – user1406716

15

Я также возникли проблемы с примерами кода. Одна из основных проблем, которые я испытывал, заключалась в объявлении ReceiveTransitionsIntentService. Вам не нужно добавить BroadcastReceiver или запрос обновления местоположения, но вы должны изменить свой AndroidManifest установить экспортированное значение истинно, например, так:

<service 
    android:name=".ReceiveTransitionsIntentService" 
    android:exported="true" > 
</service> 

Убедитесь, что путь к сервису тоже правильно ,

Я значительно упростил пример Google, и вы можете найти код и объяснение here. Я удалил компонент пользовательского интерфейса и постоянное хранилище Geofence, поэтому этот пример должен быть проще следовать. Надеюсь это поможет!

+0

Эй, ваш блог очень полезен, спасибо. Я думаю, что там есть ошибка, но в разделе манифеста перечислены ' Steven

+0

Большое спасибо за сообщение в блоге! –

+0

@mari Я не понимаю, что может быть у этого другого? Я имею в виду, я пробовал это и не играл в кости. –

-4

Как вы видите, Google была переработана логикой местоположения, это новый API. Кажется, он работает как «общий» провайдер местоположения (LocationRequest#setFastestInterval может предоставить вам координаты, если любое другое приложение запрашивает его, или вы можете получить координаты с PRIORITY_NO_POWER flag).

Geofence API - это как метод helper, вам не нужно разрабатывать подобную логику самостоятельно (расчет радиуса и т. Д.). Но, Geofence не запрашивает координаты сам по себе, он просто использует полученные координаты (т. Е. Из другого приложения). Именование метода не требует пояснений: LocationServices.GeofencingApi.addGeofences; =>addGeofences, а не requestGeofences.

Таким образом, вы должны запросить координаты с помощью:

LocationServices.FusedLocationApi.requestLocationUpdates 
+1

Неправильно, вы делаете * не * должны запрашиватьLocationUpdates для отправки вашей системы геофотоснимков. – akent

+0

@akent, если я не запрашиваю обновления местоположения. Я не получаю намерения geofence из системы, но если я открою любое приложение, которое запрашивает местоположения (например, карту), или я просто включаю обновления местоположения из своего приложения, он запускает запуск. Вы уверены, что заявили? как ты заработал? – Juancho

0

Я также с той же проблемой с Геозонами апи. В конце я использовал addProximityAlert из LocationManager. Он работал очень хорошо!