2011-11-10 12 views
1

他のアプリケーションにロケーションがある場合、インテントを受信するブロードキャストレシーバを構築しました。私はこれをクリアするために、私のアプリが実行されていないときに私は位置の更新を受け取ることができます。私が場所を受け取ったら、dbを更新するintentServiceを開始します。ロケーションのインテントを受信する方法

しかし、マニフェストではどのインテントフィルタを使用するのですか?

使用可能なインテントフィルタのリストはありますか?

+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であるため、他のアクティビティで更新された場合にのみ更新を取得できます。

この状況では、場所が変更されるたびにPendingIntentが呼び出されるため、BroadcastReceiverを使用する必要はありません。この種のものをやってすることは非常にすることができ:総括

、これはあなたがこの

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

ええ、私はそれをfugured。受信する意向はコード内で定義されます。私は実際にこの記事を見ていました。 http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html このアプローチを使用する理由を説明します。私の場合は、SQLite DBの最大20エントリを変更するのに必要な余分なリソースを使用しません。 – jiduvah

関連する問題