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