2013-04-03 127 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); 
    } 

} 

什麼也沒有發生。我假設這是因爲我沒有在我的logcat中看到任何信息。加上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投票週期短於兩分鐘的​​。

因此,你應該做的第一件事就是找出爲什麼你首先打擾LocationPollerLocationPoller背後的要點是能夠偶爾找出設備的位置,而您的代碼不一定已經在運行(例如,您希望每小時自動檢查Foursquare)。如果您需要每10秒查找一次設備的位置,則需要從前臺活動中自行使用LocationManager

假設您確信LocationPoller仍然是正確的解決方案,那麼您應該做的下一件事是將您的投票時間延長到更合理的時間,比如5分鐘,然後查看是否有幫助。

如果這沒有幫助,那麼請嘗試運行demo/項目而不進行修改。如果不起作用,那麼LocationPoller中存在一些錯誤,或者您的設備中存在一些LocationPoller正在跳過的不兼容問題,因此我需要進行一些調查。

如果demo/項目確實工作,進行復制,確認複製的作品,然後再慢慢修改副本看起來更像是你的產品代碼了,直到它停止工作 - 在這一點上,你的最後一系列變化代表了什麼打破了LocationPoller,我們可以弄清楚這是否代表LocationPoller中的錯誤或者您使用它的錯誤。

+0

我從這裏的另一個人那裏得到了一些幫助,他們基本上從您的庫中直接導入文件到項目中並使用它們。它的工作現在很好。我認爲問題出在我清單中的接收器聲明(與包相關的東西)。 現在談談你的觀點......我得到一個驅動程序的位置(它被髮送到桌面應用程序要在地圖上顯示它的服務器)。我選擇你的代碼/庫是因爲你編寫了優秀的代碼!我是Android開發的新手,所以我並不總是知道要尋找什麼,要避免什麼,要處理什麼等。 我將把時間更改爲40秒。 – Asim

+0

嗯,你能告訴我爲了讓你的服​​務自動選擇最好的提供者,我需要做些什麼改變?我的應用程序將使用戶啓用GPS,但假設他無法獲得鎖定,我想也可以使用網絡提供商。 – Asim

+0

@Asim:您需要修改'LocationPollerService'上的'requestLocation()'(以允許'EXTRA_PROVIDER'爲'String'或Criteria')和'onPreExecute()'在其''PollerThread'內部類(使用不同的'requestLocationUpdates()'版本,該版本採用'Criteria'而不是提供者名稱)。 – CommonsWare