2014-06-05 18 views
6

Ich arbeite an einer App, die Google Play-Dienste verwendet. Bei einigen Telefonen gibt der Client null für den Standort zurück. Dies geschieht, weil die Lokalisierungsoption bei google setting nicht aktiviert ist, wie im angehängten Bild.Android: Überprüfen, ob der Google-Einstellungen-Standort aktiviert ist

Wie programmatisch prüfen, ob der Google-Einstellungen-Standort in einer Android App aktiviert ist?

http://www.cnet.com/how-to/explaining-the-google-settings-icon-on-your-android-device/

+0

Verwendung 'LocationManager' die verschiedenen Anbieter – tyczj

Antwort

4
LocationManager lm = null; 
boolean gps_enabled,network_enabled; 
    if(lm==null) 
     lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    try{ 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){} 
    try{ 
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){} 

    if(!gps_enabled && !network_enabled){ 
     dialog = new AlertDialog.Builder(context); 
     dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled)); 
     dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       context.startActivity(myIntent); 
       //get gps 
      } 
     }); 
     dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface paramDialogInterface, int paramInt) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     dialog.show(); 

    } 

ACTION_LOCATION_SOURCE_SETTINGS zeigt dem Benutzer, den Konfigurationseinstellungen der aktuellen Standortquellen zu ermöglichen.

+3

prüfen Warum Sie zuerst den Wert von' lm' auf 'null' gesetzt, dann prüfen, ob es gleich zu 'null', und wenn dies der Fall ist, setzen Sie den Wert auf den System Location Service, wenn Sie ihn einfach in einer Zeile deklarieren könnten:' LocationManager lm = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE); ' –

9

Es ist möglich zu überprüfen, ob Google Play-Dienste selbst verfügbar sind. Befolgen Sie die Anweisungen hier: https://developer.android.com/training/location/retrieve-current.html

Es ist möglich, dass getLastLocation() null zurückgibt, auch wenn die Google Play Services-Standortdienste aktiviert sind. Zum Beispiel direkt nach der erneuten Aktivierung. Allerdings können Sie dann Ihre Benutzer auf die Play-Dienste Standorteinstellungen Google nehmen, indem Sie die folgende Absicht mit:

Intent settings = new Intent("com.google.android.gms.location.settings.GOOGLE_LOCATION_SETTINGS"); 
startActivity(settings); 

Schließlich ist es auch möglich, zu überprüfen, ob Android Location Services aktiviert sind:

public static boolean isLocationEnabled(Context context) { 
    int locationMode = 0; 
    String locationProviders; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ 
     try { 
      locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE); 

     } catch (SettingNotFoundException e) { 
      e.printStackTrace(); 
     } 

     return locationMode != Settings.Secure.LOCATION_MODE_OFF; 

    }else{ 
     locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
     return !TextUtils.isEmpty(locationProviders); 
    } 


} 
+0

Hallo! Diese Lösung ist wirklich gut. Nur eine Sache, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, war in API Level 17 veraltet und Kitkat hat API Level 19. In Ihrem if else Block fehlt API Level 18. Habe ich recht? –

+0

Entschuldigung für die verspätete Antwort. Nicht sicher, aber ich habe das 2014 geschrieben, also haben sich die Dinge seitdem definitiv geändert. – gflarity

0

Es sollte eine Änderung sein, wo Sie TextUtils.isEmpty(locationProviders) überprüfen. Es ist nie leer. Wenn kein Provider vorhanden ist (die Standorteinstellungen sind deaktiviert), hat er den Wert "null". Ja ich meine Wert "null", nicht null.

1

Ich dachte, das ist die beste Lösung.

können Sie überprüfen, indem Sie folgenden Code:

/** 
    * This is used to check whether location is enabled or not. 
    * @param mContext 
    * @return 
    */ 
    public static boolean isDeviceLocationEnabled(Context mContext) { 
     int locMode = 0; 
     String locProviders; 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ 
      try { 
       locMode = Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.LOCATION_MODE); 
      } catch (Settings.SettingNotFoundException e) { 
       e.printStackTrace(); 
       return false; 
      } 
      return locMode != Settings.Secure.LOCATION_MODE_OFF; 
     }else{ 
      locProviders = Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
      return !TextUtils.isEmpty(locProviders); 
     } 
    } 
Verwandte Themen