ユーザーがネットワークまたは GPS の場所を有効または無効にしたときに通知を受け取りたいのですが、重要なのは、それらがどの場所をどのように変更したかを知りたいということです。ブロードキャスト インテント用のブロードキャスト レシーバーがありandroid.location.PROVIDERS_CHANGED
、これは正しいブロードキャストを受信しています。
ここで、どのアクションが発生したか、つまり、有効化または無効化され、どのプロバイダーが変更されたかを判断する必要があります。各プロバイダーの状態を保持できることを知っており、プロバイダーが変更されたという通知を受け取ったときに、何が変更されたかを判断できます。これを行うためのより「標準的な」方法を探しています。ブロードキャスト インテントには、どのプロバイダーが変更されたかを示す余分なものがないようです。
これは私が現在持っているコードです。
public class LocationProviderChangedReceiver extends BroadcastReceiver {
private final static String TAG = "LocationProviderChangedReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().matches("android.location.PROVIDERS_CHANGED"))
{
Log.i(TAG,"Location Providers changed");
Bundle bundle = intent.getExtras();
if (bundle == null) {
Log.d(TAG, "No extras data");
} else {
Log.d(TAG, "Bundle received of size " + bundle.size);
}
}
}
}
これは私のマニフェストからの抜粋です
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<receiver
android:name=".LocationProviderChangedReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
ブロードキャスト内に、どのプロバイダーが変更されたか、およびそれが有効か無効かを示すエクストラがあれば、これは完璧です. 残念ながら、そうではありません。自分の状態変数を維持せずに、どの状態が変化したかを判断できるメカニズムを知っている人はいますか?
理想的な世界では、変化を常に監視し、場所の変化はたまに聞くだけです。場所の変更を常に監視することは避けたいと思います。