É possível obter uma notificação quando algum provedor de localização é ativado / desativado e verificar qual ação ocorreu?
Desejo receber uma notificação quando o usuário habilitar ou desabilitar locais da Rede ou do GPS e, mais importante, gostaria de saber qual deles eles mudaram e como. Eu tenho um receptor de transmissão para oandroid.location.PROVIDERS_CHANGED
intenção de transmissão e isso está recebendo a transmissão correta.
Agora preciso tentar determinar qual ação ocorreu, ou seja, ativar ou desativar e qual provedor foi alterado. Eu sei que eu poderia manter o estado de cada provedor e, em seguida, quando recebo notificação de que eles mudaram, então eu poderia descobrir o que mudou, estou procurando um método mais "padrão" de fazer isso. A intenção da transmissão não parece ter nenhum acréscimo para indicar qual provedor foi alterado.
Este é o código que tenho atualmente.
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);
}
}
}
}
E este é um pequeno extrato do meu manifesto
<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>
Isso seria perfeito se houvesse um extra dentro do Broadcast que informasse qual provedor havia mudado e se estava habilitado ou desabilitado. Infelizmente, esse não é o caso. Alguém está ciente de qualquer mecanismo pelo qual eu possa determinar o estado que mudou sem manter minhas próprias variáveis de estado.
Em um mundo ideal, eu monitoraria as mudanças constantemente, mas apenas escutaria alterações de localização ocasionalmente. Eu gostaria de evitar o monitoramento constante de alterações de localização.