17

BroadcastReceiverがテキストや電話イベントなどを監視していることは知っていますが、LocationServicesをロケーションに基づいたサービスおよびイベントとして実行できますか?

たとえば、特定のGPSポイントの近くにいて、電話が通知します。

4

2 に答える 2

36

あなたが探しているのはこんな感じだと思います。パラメータとしてaLocationManager.requestLocationUpdates()をとるバージョンがあり、このインテントを使用して。を起動できます。このコードは、ロケーションの更新で起動するカスタムブロードキャストを登録します。PendingIntentBroadcastReceiver

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パラメータを大きくして、位置情報の更新頻度を大幅に減らす必要があります。この機能は、ユーザーが制御する設定にもアタッチして、アプリがバックグラウンドで位置を追跡できないようにする必要があります。

お役に立てば幸いです。

于 2011-03-09T02:52:15.723 に答える
22

この質問は2年以上前のものですが、これを行うための非常に簡単でバッテリー効率の良い方法があります。この概念はジオフェンスと呼ばれます。あなたはそれを以下でより詳細に学ぶことができます:

http://developer.android.com/training/location/geofencing.html

于 2013-08-01T11:44:49.663 に答える