Como descobrir se o GPS de um dispositivo Android está ativado

206

Em um dispositivo habilitado para Android Cupcake (1.5), como faço para verificar e ativar o GPS?

Marcus
fonte
2
Que tal aceitar a resposta? :)
dieter 24/05

Respostas:

456

A melhor maneira parece ser a seguinte:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}
Marcus
fonte
1
Principalmente, é sobre ativar a intenção de ver a configuração do GPS, consulte github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… para obter detalhes.
21478 Marcus
3
Bom trecho de código. Removai o @SuppressWarnings e não estou recebendo nenhum aviso ... talvez eles sejam desnecessários?
span
30
Aconselho declarando alertpara toda a atividade que você pode descartá-lo em onDestroy para evitar uma fuga de memória ( if(alert != null) { alert.dismiss(); })
Cameron
E se eu estiver economizando bateria, isso ainda funcionará?
Prakhar Mohan Srivastava
3
@PrakharMohanSrivastava se as definições de localização estão em economia de energia, isso irá retornar falso, no entanto LocationManager.NETWORK_PROVIDERretornará true
Tim
129

No Android, podemos verificar facilmente se o GPS está ativado no dispositivo ou não usando o LocationManager.

Aqui está um programa simples para verificar.

GPS ativado ou não: - Adicione a linha de permissão do usuário abaixo no AndroidManifest.xml para acessar o local

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Seu arquivo de classe java deve ser

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

A saída será semelhante a

insira a descrição da imagem aqui

insira a descrição da imagem aqui

berílio
fonte
1
Nada acontece quando tento sua função. Não obtive erros quando o testo.
Airikr
Eu consegui! :) Muito obrigado, mas não posso votar até que você edite sua resposta: /
Airikr 2/12
3
sem problemas @Erik Edgren, você obtém a solução, então estou feliz, aproveite ... !!
@ user647826: Excelente! Funciona bem. Você salvou minha noite
Addi 23/05
1
Um conselho: Declare alertpara toda a atividade que você pode descartá-lo em onDestroy()evitar um vazamento de memória ( if(alert != null) { alert.dismiss(); })
NAXA
38

sim As configurações de GPS não podem mais ser alteradas programaticamente, pois são configurações de privacidade e temos que verificar se estão ativadas ou não no programa e tratá-lo se não estiverem ativadas. você pode notificar o usuário que o GPS está desligado e usar algo assim para mostrar a tela de configurações ao usuário, se desejar.

Verifique se os provedores de localização estão disponíveis

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

Se o usuário deseja ativar o GPS, você pode mostrar a tela de configurações dessa maneira.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

E no seu onActivityResult, você pode ver se o usuário ativou ou não

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

Essa é uma maneira de fazê-lo e espero que ajude. Deixe-me saber se estou fazendo algo errado.

achie
fonte
2
oi, eu tenho um problema semelhante ... você pode explicar brevemente o que é o "REQUEST_CODE" e para que serve?
Poeschlorn
2
@poeschlorn Anna postou o link para detalhes abaixo. Em termos simples, o RequestCode permite que você use startActivityForResultcom várias intenções. Quando as intenções retornam à sua atividade, você verifica o RequestCode para ver qual intenção está retornando e responde de acordo.
Farray 17/02
2
A providerpode ser uma cadeia vazia. Eu tive que mudar o cheque para(provider != null && !provider.isEmpty())
Pawan
Como o provedor pode "", considere usar o modo int = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Se mode = 0 GPS estiver desligado
Levon Petrosyan
31

Aqui estão os passos:

Etapa 1: crie serviços em execução em segundo plano.

Etapa 2: Você também precisa da seguinte permissão no arquivo Manifest:

android.permission.ACCESS_FINE_LOCATION

Etapa 3: escreva o código:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

Etapa 4: ou simplesmente você pode verificar usando:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

Etapa 5: execute seus serviços continuamente para monitorar a conexão.

Rakesh
fonte
5
Diz que o GPS está ativado mesmo quando está desligado.
21719 Ivan Ivan V
15

Sim, você pode conferir abaixo o código:

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Arun kumar
fonte
9

Este método usará o serviço LocationManager .

Link de origem

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};
Code Spy
fonte
6

O GPS será usado se o usuário permitir que seja usado em suas configurações.

Você não pode mais ativar explicitamente isso, mas não precisa - é realmente uma configuração de privacidade, para que você não queira alterá-la. Se o usuário estiver de acordo com os aplicativos que recebem coordenadas precisas, ele estará ativado. Em seguida, a API do gerenciador de localização usará o GPS, se puder.

Se o seu aplicativo realmente não for útil sem o GPS e estiver desativado, você poderá abrir o aplicativo de configurações na tela certa usando uma intenção para que o usuário possa ativá-lo.


fonte
6

Este código verifica o status do GPS

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

`

kashifahmad
fonte
3

Nos seus LocationListenerimplementadores onProviderEnablede onProviderDisabledmanipuladores de eventos. Quando você ligar requestLocationUpdates(...), se o GPS estiver desativado no telefone, onProviderDisabledserá chamado; se o usuário ativar o GPS, onProviderEnabledserá chamado.

Ahmad Pourbafrani
fonte
2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
safal bhatia
fonte