Réponses:
La meilleure façon semble être la suivante:
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
pour l'ensemble de l'activité afin que vous puissiez la rejeter dans onDestroy pour éviter une fuite de mémoire ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
reviendra vrai
Dans Android, nous pouvons facilement vérifier si le GPS est activé sur l'appareil ou non à l'aide de LocationManager.
Voici un programme simple à vérifier.
GPS activé ou non: - Ajoutez la ligne d'autorisation utilisateur ci-dessous dans AndroidManifest.xml pour accéder à l'emplacement
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Votre fichier de classe java doit être
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();
}
}
La sortie ressemble à
alert
pour toute l'activité afin de pouvoir la onDestroy()
if(alert != null) { alert.dismiss(); }
oui, les paramètres GPS ne peuvent plus être modifiés par programme car ce sont des paramètres de confidentialité et nous devons vérifier s'ils sont allumés ou non depuis le programme et les gérer s'ils ne sont pas allumés. vous pouvez informer l'utilisateur que le GPS est désactivé et utiliser quelque chose comme ceci pour montrer l'écran des paramètres à l'utilisateur si vous le souhaitez.
Vérifiez si les fournisseurs de localisation sont disponibles
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
}
Si l'utilisateur souhaite activer le GPS, vous pouvez afficher l'écran des paramètres de cette manière.
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
Et dans votre onActivityResult, vous pouvez voir si l'utilisateur l'a activé ou non
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
}
}
}
C'est une façon de le faire et j'espère que cela aide. Faites-moi savoir si je fais quelque chose de mal.
startActivityForResult
avec plusieurs intentions. Lorsque les intentions reviennent à votre activité, vous vérifiez le RequestCode pour voir quelle intention revient et répondez en conséquence.
provider
peut être une chaîne vide. J'ai dû changer le chèque en(provider != null && !provider.isEmpty())
Voici les étapes:
Étape 1: créer des services exécutés en arrière-plan.
Étape 2: Vous avez également besoin de l'autorisation suivante dans le fichier manifeste:
android.permission.ACCESS_FINE_LOCATION
Étape 3: Écrivez le code:
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();
Étape 4: Ou tout simplement, vous pouvez vérifier en utilisant:
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Étape 5: exécutez vos services en continu pour surveiller la connexion.
Oui, vous pouvez vérifier ci-dessous le code:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Cette méthode utilisera le service LocationManager .
Lien source
//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;
};
Le GPS sera utilisé si l'utilisateur a autorisé son utilisation dans ses paramètres.
Vous ne pouvez plus l'activer explicitement, mais vous n'êtes pas obligé - c'est vraiment un paramètre de confidentialité, donc vous ne voulez pas le modifier. Si l'utilisateur est d'accord avec les applications obtenant des coordonnées précises, ce sera activé. L'API du gestionnaire de localisation utilisera alors le GPS si c'est possible.
Si votre application n'est vraiment pas utile sans GPS et qu'elle est désactivée, vous pouvez ouvrir l'application des paramètres sur l'écran de droite en utilisant une intention afin que l'utilisateur puisse l'activer.
Ce morceau de code vérifie l'état du GPS
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
"
Dans vos gestionnaires d' LocationListener
implémentation onProviderEnabled
et d' onProviderDisabled
événement. Lorsque vous appelez requestLocationUpdates(...)
, si le GPS est désactivé sur le téléphone, onProviderDisabled
sera appelé; si l'utilisateur active le GPS, onProviderEnabled
sera appelé.
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()
}