Можно ли получить уведомление о включении / отключении любого провайдера местоположения и выяснить, какое действие произошло?

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

В идеальном мире я бы постоянно следил за изменениями, но время от времени только прислушивался к их изменениям. Я хотел бы избежать постоянного мониторинга изменений местоположения.

Ответы на вопрос(4)

Ваш ответ на вопрос