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

questionAnswers(2)

yourAnswerToTheQuestion