Antworten:
Der beste Weg scheint der folgende zu sein:
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
für die gesamte Aktivität zu deklarieren, damit Sie sie in onDestroy schließen können, um einen Speicherverlust zu vermeiden ( if(alert != null) { alert.dismiss(); }
)
LocationManager.NETWORK_PROVIDER
true zurückgeben
In Android können wir mit LocationManager leicht überprüfen, ob GPS im Gerät aktiviert ist oder nicht.
Hier ist ein einfaches Programm zu überprüfen.
GPS aktiviert oder nicht: - Fügen Sie die folgende Benutzerberechtigungszeile in AndroidManifest.xml zum Zugriff auf den Speicherort hinzu
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Ihre Java-Klassendatei sollte sein
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();
}
}
Die Ausgabe sieht so aus
alert
für die gesamte Aktivität, damit Sie sie schließen können, onDestroy()
um einen Speicherverlust zu vermeiden ( if(alert != null) { alert.dismiss(); }
)
Ja, GPS-Einstellungen können nicht mehr programmgesteuert geändert werden, da es sich um Datenschutzeinstellungen handelt. Wir müssen überprüfen, ob sie im Programm aktiviert sind oder nicht, und sie verarbeiten, wenn sie nicht aktiviert sind. Sie können den Benutzer benachrichtigen, dass das GPS ausgeschaltet ist, und auf diese Weise dem Benutzer den Einstellungsbildschirm anzeigen, wenn Sie möchten.
Überprüfen Sie, ob Standortanbieter verfügbar sind
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
}
Wenn der Benutzer GPS aktivieren möchte, können Sie den Einstellungsbildschirm auf diese Weise anzeigen.
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);
In Ihrem onActivityResult können Sie sehen, ob der Benutzer es aktiviert hat oder nicht
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
}
}
}
Das ist eine Möglichkeit und ich hoffe, es hilft. Lassen Sie mich wissen, wenn ich etwas falsch mache.
startActivityForResult
mit mehreren Absichten. Wenn die Absichten zu Ihrer Aktivität zurückkehren, überprüfen Sie den RequestCode, um festzustellen, welche Absicht zurückgegeben wird, und reagieren entsprechend.
provider
kann eine leere Zeichenfolge sein. Ich musste den Scheck ändern(provider != null && !provider.isEmpty())
Hier sind die Schritte:
Schritt 1: Erstellen Sie Dienste, die im Hintergrund ausgeführt werden.
Schritt 2: Sie benötigen auch die folgende Berechtigung in der Manifest-Datei:
android.permission.ACCESS_FINE_LOCATION
Schritt 3: Code schreiben:
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();
Schritt 4: Oder Sie können einfach überprüfen mit:
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Schritt 5: Führen Sie Ihre Dienste kontinuierlich aus, um die Verbindung zu überwachen.
Ja, Sie können unten den Code überprüfen:
public boolean isGPSEnabled (Context mContext){
LocationManager locationManager = (LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Diese Methode verwendet den LocationManager- Dienst.
Quelle Link -
//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;
};
GPS wird verwendet, wenn der Benutzer die Verwendung in seinen Einstellungen zugelassen hat.
Sie können dies nicht mehr explizit einschalten, müssen es aber nicht - es ist wirklich eine Datenschutzeinstellung, also möchten Sie es nicht optimieren. Wenn der Benutzer damit einverstanden ist, dass Apps präzise Koordinaten erhalten, wird sie aktiviert. Dann verwendet die Location Manager-API GPS, wenn dies möglich ist.
Wenn Ihre App ohne GPS wirklich nicht nützlich ist und ausgeschaltet ist, können Sie die Einstellungs-App auf dem rechten Bildschirm mit einer Absicht öffnen, damit der Benutzer sie aktivieren kann.
Dieser Code überprüft den GPS-Status
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
buildAlertMessageNoGps();
}
`
In Ihren LocationListener
Implementierungs- onProviderEnabled
und onProviderDisabled
Ereignishandlern. Wenn Sie anrufen requestLocationUpdates(...)
und GPS auf dem Telefon deaktiviert ist, onProviderDisabled
wird angerufen. Wenn der Benutzer GPS aktiviert, onProviderEnabled
wird aufgerufen.
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()
}