2013-04-03 2 views
0

Я был связан с вашей библиотекой (еще раз, СПАСИБО и отличная работа).CWAC LocationPoller - трансляция не принимается

Я пробовал последние два часа, в чем проблема, но я потерпел неудачу.

Вот AlarmManager в моем Вход код экрана:

Intent i = new Intent(con, LocationPoller.class); 
       i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(con, 
         LocationReceiver.class)); 
       i.putExtra(LocationPoller.EXTRA_PROVIDER, 
         LocationManager.NETWORK_PROVIDER); 

       gps = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

       PendingIntent pi = PendingIntent.getBroadcast(con, 0, i, PendingIntent.FLAG_NO_CREATE); 
       gps.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 
         10 * 1000, pi); 
       Log.d("Service: ", 
         "GPS Service started and scheduled with AlarmManager"); 

Вот класс, я создал себе (а не один из вашего демо, хотя подобное):

public class LocationReceiver extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle b = intent.getExtras(); 
     Location loc = (Location) b.get(LocationPoller.EXTRA_LOCATION); 

     String msg; 

     if (loc == null) 
     { 
      loc = (Location) b.get(LocationPoller.EXTRA_LASTKNOWN); 

      if (loc == null) 
      { 
       msg = intent.getStringExtra(LocationPoller.EXTRA_ERROR); 
      } 
      else 
      { 
       msg = "TIMEOUT, lastKnown=" + loc.toString(); 
      } 
     } 
     else 
     { 
      msg = loc.toString(); 
     } 

     if (msg == null) 
     { 
      msg = "Invalid broadcast received!"; 
     } 

     Log.d("GPS Broadcast: ", "Location: " + msg); 
    } 

} 

Ничего не происходит. Я предполагаю это, потому что я вообще не вижу никакой информации в своем логарифме. Кроме того, PollerThread (если это правильный термин) продолжает накапливаться, когда я смотрю на представление отладки, как будто они все ждут чего-то, но не отправляют какие-либо трансляции.

Что я делаю неправильно? Определить местоположение через сеть не должно занять много времени, если это? Даже если это был вопрос, я должен был получить обратную связь ..

Вот записи в прикладном теге моего манифеста,:

<receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" /> 
     <receiver android:name=".LocationReceiver" /> 
     <service android:name="com.commonsware.cwac.locpoll.LocationPollerService" /> 

ответ

1

LocationPoller предназначен для более длительных периодов опроса: час, а не 10 секунд. Я никогда не тестировал LocationPoller с частым периодом опроса, и я никогда не собираюсь поддерживать LocationPoller с периодом опроса короче, чем DEFAULT_TIMEOUT двух минут.

Следовательно, первое, что вам нужно сделать, это выяснить, почему вы беспокоитесь о LocationPoller в первую очередь. Точка, стоящая за LocationPoller, должна иметь возможность иногда определять, где находится устройство, без вашего кода, который уже запущен (например, вы хотите автоматически проверять Foursquare каждый час). Если вам нужно выяснить, где устройство находится каждые 10 секунд, вам нужно использовать LocationManager себя из переднего плана.

Предполагая, что вы уверены, что LocationPoller по-прежнему является правильным решением, следующее, что вам нужно сделать, - это продлить период опроса до более разумного, например 5 минут, и посмотреть, поможет ли это.

Если это не поможет, попробуйте запустить проект demo/ без изменений. Если не работает, то не работает, тогда есть ошибка в LocationPoller или какая-то несовместимость на вашем устройстве, которая отключается LocationPoller, и мне нужно будет провести некоторое расследование.

Если demo/ проект делает работу, сделать копию, подтвердить копии работ, а затем медленно изменить копию выглядеть как то, что ваш код продукции имеет, пока он не перестанет работать, - в тот момент, ваш последний набор изменений представляет собой то, что сломалось LocationPoller, и мы можем выяснить, представляет ли он ошибку в LocationPoller или ошибку в ее использовании.

+0

Я получил помощь от другого парня, который в основном импортировал файлы из вашей библиотеки непосредственно в проект и использовал их. Теперь он работает отлично. Я думаю, что проблема заключалась в заявлении получателя в моем манифесте (что-то связано с пакетами). Теперь о вашей точке ... Я получаю местоположение водителя (он отправляется на сервер, где настольное приложение отображает его на карте). Я выбрал ваш код/​​библиотеку, потому что хорошо, вы пишете отличный код!Я новичок в разработке Android, поэтому я не всегда знаю, что искать, чего избегать, что с ним делать. Я собираюсь изменить время до 40. – Asim

+0

Умм вы можете сказать мне, какие изменения мне нужно сделать, чтобы ваша служба автоматически выбирала лучшего поставщика? Мое приложение заставит пользователя включить GPS, но предположим, что он не может получить блокировку, я также хочу иметь возможность использовать Сетевой провайдер. – Asim

+0

@Asim: вам нужно будет изменить 'requestLocation()' на 'LocationPollerService' (чтобы разрешить' EXTRA_PROVIDER' быть либо 'String', либо' Criteria') и 'onPreExecute()' в его внутреннем классе 'PollerThread' (для использования другой 'requestLocationUpdates()' версии, которая берет «Критерии» вместо имени поставщика). – CommonsWare

Смежные вопросы