Por que o método onProviderEnabled () do Android não está sendo chamado?
aplicativo @My Android possui dois ouvintes de localização, um para ouvidos finos e outro para ouvidos grosseiros. Quero poder detectar quando o usuário ativa e desativa os serviços de localização.
Sempre que eu desligo o GPS do telefone ou os serviços de localização na rede, o método onProviderDisabled é chamado conforme o esperado. Quando ligo o GPS ou os serviços de rede, o onProviderEnabled nunca é chamado!
Coloquei o código para um dos ouvintes abaixo ....
Atualizar..
Descobri que o problema está relacionado ao cancelamento do registro dos ouvintes na onPause. Quando eu removo o código "locationManager.removeUpdates (myFineLocationListener);" o método onProviderEnabled () É chamado.
Talvez o ato de desativar o (digamos) GPS cancele o registro automático do ouvinte? Talvez eu deva cancelar o registro do ouvinte no onDestroy em vez de no onPause () ???
PS. Talvez seja relevante mencionar que minha atividade possui um botão que vai diretamente para a página de configurações de localização de dispositivos. Atua como um atalho. Eu uso esse atalho para desativar / ativar os serviços de localização e, em seguida, use o botão Voltar para retornar ao meu aplicativo. Vou colocar o código para este botão no final deste post.
Código
(O método createLocListeners () é chamado de onCreate ();)
void createLocListeners() {
//if null, create a new listener
//myFineLocationListener is a class variable
if (myFineLocationListener == null) {
//Listen for FINE location updates
myFineLocationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
//Do something
}
@Override
public void onProviderDisabled(String provider) {
//This gets called when I change location settings (eg GPS on or off) on the phone }
@Override
public void onProviderEnabled(String provider) {
//This DOES NOT get called when I change location settings (eg GPS on or off) on the phone
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}; //end on location listener
} //end if fine listener is null
} //end createLocListener() function
@Override
protected void onResume() {
super.onResume();
//REGISTER LOCATION LISTENERS
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LISTENING_INTERVAL, LISTENING_DISTANCE, myFineLocationListener);
}
catch (IllegalArgumentException e){
//Tried catching exceptions but there weren't any
}
catch (RuntimeException e) {
}
}// end onResume()
@Override
protected void onPause() {
super.onPause();
//UNREGISTER LOCATION LISTENERS
locationManager.removeUpdates(myFineLocationListener);
} //end onPause
Problema semelhante: serviço @Location onProviderEnabled nunca é chamado
Código para o botão que abre a página Configurações de localização ...
//JUMP TO LOCATION SERVICES SETTINGS
ibLoc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
}); //end jump to location services button listener