2011-03-09 59 views
13

我知道BroadcastReceiver手錶的文本,電話事件等......但你可以運行LocationServices作爲基於位置的服務和事件嗎?BroadcastReceiver的位置

例如,您接近某個GPS點並且電話會通知您。

+1

在這裏你去http://developer.android.com/reference/android/location/LocationListener.html – schwiz 2011-03-09 02:34:39

回答

31

我認爲你在找什麼是這樣的。有一個版本LocationManager.requestLocationUpdates()需要PendingIntent作爲參數,並且這個意圖可以用來觸發BroadcastReceiver。此代碼將註冊一個自定義廣播,並與位置更新一起啓動。

Intent intent = new Intent("UNIQUE_BROADCAST_ACTION_STRING_HERE"); 
LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
long minTime;  //This should probably be fairly long 
float minDistance; //This should probably be fairly big 
String provider; //GPS_PROVIDER or NETWORK_PROVIDER 

PendingIntent launchIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
manager.requestLocationUpdates(provider, minTime, minDistance, launchIntent); 

然後你只需要註冊BroadcastReceiver具有相同意圖的動作,它會接收處理的位置更新。當然,請保持PendingIntent,因爲您需要在某個時候致電manager.removeUpdates(launchIntent)

最後請注意:

因爲它聽起來像你想實現定期位置更新,而您的應用程序是不是在前臺,這記在心上。除非你希望你的應用被稱爲電池殺手,否則要非常小心你如何實現這個功能。

您將希望通過大minTime或minDistance參數大大減少位置更新的頻率,以允許位置服務休息。此功能還應附加到用戶控制的偏好,以便他們可以啓用/禁用您的應用程序以跟蹤後臺中的位置。

希望有助於!

+0

@無線的設計,你是一個寶石,我認爲是這樣,我仍然在學習有關Droid的INTENT,你的回答非常豐富 - 感謝你的時間先生! – ProNeticas 2011-03-09 05:09:12

+0

沒問題。如果這個答案最終解決了你的問題,隨時接受它。乾杯! – Devunwired 2011-03-09 05:51:13

+0

我會的,我想先測試;) – ProNeticas 2011-03-09 06:50:33