2017-03-22 5 views
0

Kontext Ich habe diese Anwendung, die einen Benutzer benötigt, um Ort vor jeder Aktivität aktivieren, da wir den Standort protokollieren, wie sie sich bewegen, jedoch einige meiner Benutzer wählen Bleiben Sie im Flugmodus während der Bewegung.Alle meine Benutzer verwenden Android-Version 4.4 Samsung Galaxy J1, die nicht verwurzelt ist. Unsere Benutzer sind in abgelegenen Gebieten ohne WiFi-Signale und schwache Netzwerk-Signale, so dass wir nur GPS verwenden, um den Standort zu erhalten. Das folgende Bild zeigt die Eingabeaufforderung, wenn der Flugmodus deaktiviert ist und der Standort in der App deaktiviert ist.Einschalten des Standortes fehlgeschlagen, wenn Android-Gerät im Flugmodus ist

Expected prompt

Problem:

Leider, wenn im Flugmodus, wird der Benutzer nicht aufgefordert, seine Position gedreht wird.Die Code verwendet zu haben, ist wie unten gezeigt von google

public void getLocationSettings() 
{ 
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(mLocationRequest); 
    builder.setAlwaysShow(true); 
    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, 
        builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(@NonNull LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      //final LocationSettingsStates = result.getLocationSettingsStates(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        // All location settings are satisfied. The client can 
        // initialize location requests here. 

        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        // Location settings are not satisfied, but this can be fixed 
        // by showing the user a dialog. 
        try { 
         // Show the dialog by calling startResolutionForResult(), 
         // and check the result in onActivityResult(). 
         status.startResolutionForResult(MainActivity.this,REQUEST_CHECK_SETTINGS); 
        } catch (IntentSender.SendIntentException e) { 
         // Ignore the error. 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        // Location settings are not satisfied. However, we have no way 
        // to fix the settings so we won't show the dialog. 
        break; 
      } 
     } 
    }); 
} 

Wenn der Flugmodus und der Standort ausgeschaltet sind, führt diese Überprüfung immer zu SETTINGS_CHANGE_UNAVAILABLE . Daher können wir keine Aktivität ausführen. Mit dieser anderen Code-Überprüfung können Sie jedoch nur Standortdaten abrufen, selbst wenn sich der Benutzer im Flugmodus befindet.

public static Boolean gpsStatus(Context context) 
{ 
    LocationManager locationManager = (LocationManager) context .getSystemService(context.LOCATION_SERVICE); 
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
} 

jedoch mit dem Ansatz oben, ich nicht in der Lage bin diesen Code auszuführen, unter dem Benutzer vor Ort zu drehen aufgefordert, indem Sie auf den Dialog in Ordnung klicken:

// Location settings are not satisfied, but this can be fixed 
// by showing the user a dialog. 
try { 
    // Show the dialog by calling startResolutionForResult(), 
    // and check the result in onActivityResult(). 
    status.startResolutionForResult(MainActivity.this,REQUEST_CHECK_SETTINGS); 
} catch (IntentSender.SendIntentException e) { 
    // Ignore the error. 
} 

Der obige Code einen Benutzer auffordert, Klicken Sie auf OK, um den Standort zu aktivieren, damit der Benutzer die App nicht verlassen und zu den Einstellungen wechseln muss, um den Standort zu aktivieren. Beim Auschecken anderer Anwendungen, die einen Standort erfordern, habe ich auch festgestellt, dass es sich um die gleiche Standortüberprüfung handelt, die von Google Maps verwendet wird, wenn der Flugmodus und der Standort ausgeschaltet sind.Google Maps können Nutzer auch nicht daran erinnern, den Standort zu wechseln und sie nur zu informieren Überprüfen Sie ihre Internet-Verbindung.Any Ideen für die beste Möglichkeit, immer für Standorteinstellungen zu überprüfen, wird sehr geschätzt werden, danke

+1

Warum nicht überprüfen, ob der Benutzer den Flugzeugmodus aktiviert hat, und eine Warnung ausgeben, um ihn zu benachrichtigen, dass er ausgeschaltet wird? Überprüfen Sie danach, ob der Standort aktiviert ist. –

+0

@ Adrian-AlexandruComan, der Flugmodus hilft beim Akku sparen, da unsere Benutzeraktivitäten den ganzen Tag im Offline-Modus stattfinden. Sie schalten nur am Abend mobile Daten ein. – simiyukuta

Antwort

0

Ab sofort verwende ich beide Prüfungen, um beide Szenarien zu kümmern, dh prompt Benutzer in Ort einzuschalten Der Flugmodus ist deaktiviert und wir können auf die Einstellungen zugreifen oder den Benutzer bitten, zu den Einstellungen zu gehen und den Standort zu aktivieren. Der verwendete Code ist wie folgt. Mit diesem Ansatz können wir immer nach Standorteinstellungen suchen und die notwendigen Maßnahmen ergreifen.

Verwandte Themen