Я хочу получать уведомление, когда пользователь включает или отключает местоположение сети или 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>
Было бы идеально, если бы в вещании было дополнение, указывающее, какой провайдер изменился и был ли он включен или отключен. К сожалению, это не случай. Кто-нибудь знает о каком-либо механизме, с помощью которого я могу определить, какое состояние изменилось, не поддерживая мои собственные переменные состояния.
В идеальном мире я бы постоянно следил за изменениями, но лишь изредка прислушивался к изменениям местоположения. Я хотел бы избежать постоянного отслеживания изменений местоположения.