我已經構建了一個廣播接收器,當其他應用程序獲得位置時,我想要接收意圖。對我來說清楚這是我的應用程序沒有運行時我可以接收位置更新。當我收到位置時,我開始一個intentService來更新我的db。如何接收位置的內容
但是我不確定在清單中使用哪個意圖過濾器?
是否有我可以使用什麼意圖過濾器的列表?
我已經構建了一個廣播接收器,當其他應用程序獲得位置時,我想要接收意圖。對我來說清楚這是我的應用程序沒有運行時我可以接收位置更新。當我收到位置時,我開始一個intentService來更新我的db。如何接收位置的內容
但是我不確定在清單中使用哪個意圖過濾器?
是否有我可以使用什麼意圖過濾器的列表?
你可以做的一件事是使用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" />
警告:做這種事情是非常對電池徵稅。請確保您爲minTime
和minDistance
設置理智值,並在不再需要更新時致電locationManager.removeUpdates(pendingIntent);
。
我想在我的應用程序關閉時收到更新。所以這就是我使用廣播接收器的原因。所以我無法動態地註冊被動提供者。這樣我就不會使用任何額外的電池,因爲當其他應用程序獲得它時,我將只接收該位置。我已將問題更新爲更清晰 – jiduvah
我不知道有關位置更新的BroadcastReceiver。這可能是故意的,因爲它意味着很多開銷,因爲位置可能變化非常迅速。即使使用接收器,如果每次在任何位置更新位置時都要執行某些操作,您仍然會使用更多資源。即使您的應用程序未運行,您爲什麼還需要位置更新? – Craigy
是的,我倒出來了。接受的意圖是在代碼中定義的。我其實在看這個帖子。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html 它解釋了爲什麼你可能會使用這種方法。在我的情況下,它不會使用任何額外的資源appart從更改SQLite數據庫中的最多20個條目。 – jiduvah
您可以使用的意圖過濾器列表在這裏http://developer.android.com/reference/android/content/Intent.html#constants – Craigy