2011-01-26 5 views
0

私は、デバイスがブートされている限り、バックグラウンドで実行されるロケーションサービスを持っています。 LocationManager requestLocationUpdateメソッドを呼び出してネットワークとGPSプロバイダーの更新を要求しましたが、ロケーションサービスを有効または無効にしてMy Location設定ページを変更すると、onProviderEnabledまたはProviderDisabledは呼び出されません。だから私は、バックグラウンドサービスがユーザーが場所の設定を変更するたびにどのように通知されるのか知りたいですか?ブロードキャストメッセージをキャッシュする受信機モードでそれを行うことはできますか?アンドロイド:マイロケーション設定ロケーションサービスがユーザによって有効または無効にされたときに気づく方法

+1

"私は、デバイスが起動されている限り、バックグラウンドで実行されるロケーションサービスを持っています。" - しないでください。 'RequestLocationUpdates()'の 'PendingIntent'バージョンを使用するか、' AlarmManager'とmy ['LocationPoller'](https://github.com/commonsguy/cwac-locpoll)などを使ってポーリングしてください。 – CommonsWare

+0

正直言って、バックグラウンドで常時稼働している位置情報サービスは決して良い考えではありません。 GPSとデータは、最もバッテリーを使い果たしている2つのサービスであり、これらのポーリングを継続すると、通常よりも約4〜5倍速い速度でデバイスが排水されます。あなたがこれを実装しようとしている場合は、定期的に位置の更新をポーリングする必要があります。 –

答えて

0

はい、GPSのオン/オフブロードキャストをリッスンするブロードキャスト受信クラスをサービス内に実装することができます。 GPSがオンまたはオフになっても、onProviderEnabled()メソッドは呼び出されず、GpsStatus.OnGpsStatusChanged()メソッドが呼び出されます。

GPS_EVENT_STARTED GPS_EVENT_STOPPED

ブロードキャストレシーバーを実装する方法についてBroadcastReceiver APIを参照してください:

GPSが変更されたときに送られた放送は、イベント値を持っています。

+1

Johnさんにお返事ありがとうございますが、あなたが言及した方法はGPS設定のみです。ユーザーがネットワークプロバイダのみを有効にした場合はどうなりますか? – user591387

+1

gps設定の変更は検出できますが、ネットワーク設定の変更は検出できません。 – user591387

+0

ネットワークプロバイダが有効か無効かを検出するには、ConnectivityManagerクラスを使用する必要があります。 http://developer.android.com/reference/android/net/ConnectivityManager.html これはブロードキャストを送信しますCONNECTIVITY_ACTION定数は、別のネットワークが変更されたときに通知しますが、モバイル・ネットワークが使用不可の場合はString定数ACTION_BACKGROUND_DATA_SETTING_CHANGEDとなります。詳細な情報を見つけるには、ConnectivityManagerのメソッドを使用する必要があります。 –

関連する問題