2011-11-10 38 views
1

我已經構建了一個廣播接收器,當其他應用程序獲得位置時,我想要接收意圖。對我來說清楚這是我的應用程序沒有運行時我可以接收位置更新。當我收到位置時,我開始一個intentService來更新我的db。如何接收位置的內容

但是我不確定在清單中使用哪個意圖過濾器?

是否有我可以使用什麼意圖過濾器的列表?

+0

您可以使用的意圖過濾器列表在這裏http://developer.android.com/reference/android/content/Intent.html#constants – Craigy

回答

0

你可以做的一件事是使用LocationManager requestLocationUpdates() method with a pending intent argument。如果您使用的是API版本8或更高版本,則您要使用的位置提供程序是PASSIVE_PROVIDER,以便只有在其他活動更新它們時纔會獲取更新。

在這種情況下,您不必使用BroadcastReceiver,因爲只要位置發生變化就會調用PendingIntent。

總結起來,這是你如何能實現這個

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    Intent intent = new Intent(this, PassiveLocationActivity.class); 

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      intent, 0); 

    locationManager.requestLocationUpdates(
      LocationManager.PASSIVE_PROVIDER, 1000, 10.0f, pendingIntent); 

,並確保您的許可添加到您的清單

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

警告:做這種事情是非常對電池徵稅。請確保您爲minTimeminDistance設置理智值,並在不再需要更新時致電locationManager.removeUpdates(pendingIntent);

+0

我想在我的應用程序關閉時收到更新。所以這就是我使用廣播接收器的原因。所以我無法動態地註冊被動提供者。這樣我就不會使用任何額外的電池,因爲當其他應用程序獲得它時,我將只接收該位置。我已將問題更新爲更清晰 – jiduvah

+0

我不知道有關位置更新的BroadcastReceiver。這可能是故意的,因爲它意味着很多開銷,因爲位置可能變化非常迅速。即使使用接收器,如果每次在任何位置更新位置時都要執行某些操作,您仍然會使用更多資源。即使您的應用程序未運行,您爲什麼還需要位置更新? – Craigy

+0

是的,我倒出來了。接受的意圖是在代碼中定義的。我其實在看這個帖子。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html 它解釋了爲什麼你可能會使用這種方法。在我的情況下,它不會使用任何額外的資源appart從更改SQLite數據庫中的最多20個條目。 – jiduvah