Respostas:
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();
}
alert
para toda a atividade que você pode descartá-lo em onDestroy para evitar uma fuga de memória ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
retornará true
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
alert
para toda a atividade que você pode descartá-lo em onDestroy()
evitar um vazamento de memória ( if(alert != null) { alert.dismiss(); }
)
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.
startActivityForResult
com 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.
provider
pode ser uma cadeia vazia. Eu tive que mudar o cheque para(provider != null && !provider.isEmpty())
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.
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);
}
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;
};
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.
Este código verifica o status do GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
Nos seus LocationListener
implementadores onProviderEnabled
e onProviderDisabled
manipuladores de eventos. Quando você ligar requestLocationUpdates(...)
, se o GPS estiver desativado no telefone, onProviderDisabled
será chamado; se o usuário ativar o GPS, onProviderEnabled
será chamado.
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()
}