2014-06-05 24 views
6

google oyun hizmetlerini kullanan bir uygulama üzerinde çalışıyorum. Bazı telefonlarda, istemci konum için null değerini döndürür. Bunun nedeni, ekli resimdeki konum ayarının google ayarında etkinleştirilmemesidir.Android: google ayarları konumunun etkin olup olmadığını kontrol etme

Android uygulamasında google ayarları konumunun etkin olup olmadığı nasıl kontrol edilir?

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

+0

kullanım 'LocationManager' ilk null'' etmek lm' 'değerini kurarım Neden farklı sağlayıcılar – tyczj

cevap

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 geçerli konum kaynaklarının yapılandırmasına olanak tanıyan, ayarlar kullanıcıyı gösterir.

+3

kontrol etmek, daha sonra kontrol 'null' ise ve eğer varsa, sistem konumu hizmetine değerini ayarlayın, sadece bir satırda bildirdiğinizde, şöyle ki: 'LocationManager lm = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);' –

9

Google oyun hizmetlerinin kullanılabilir olup olmadığını kontrol etmek mümkündür. Talimatları buradan izleyin:

Google Play Hizmetleri Konum Servisleri etkin olsa bile getLastLocation() öğesi null değerini döndürür. Örneğin, onları yeniden etkinleştirdikten hemen sonra. Eğer aşağıdaki niyeti kullanarak Google Play Hizmetleri Konum Ayarları için kullanıcıyı alabilir Ancak: Son olarak

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

Android Konum Servisleri etkin olup olmadığını, bu kontrol etmek de mümkündür:

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

Merhaba! Bu çözüm gerçekten çok iyi. Sadece bir şey, Settings.Secure.LOCATION_PROVIDERS_ALLOWED API Seviye 17'de kullanımdan kaldırıldı ve Kitkat API Düzey 19'a sahip. Eğer başka bir blokta API Seviye 18 eksik. Ben haklı mıyım –

+0

Gecikmiş cevap için özür dilerim. Emin değilim ama bunu 2014 yılında yazdım, o zamandan beri işler kesinlikle değişti. – gflarity

0

Orada gerektiği TextUtils.isEmpty(locationProviders)'u kontrol ettiğiniz tek değişiklik. Asla boş değil. Sağlayıcı bulunmadığında (konum ayarları devre dışı bırakılmışsa) "null" değerine sahiptir. Evet değeri "null", null değil.

1

Bunun en iyi çözüm olduğunu düşündüm.

Sen kod izleyerek kontrol edebilirsiniz: o eşitse

/** 
    * 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); 
     } 
    } 
İlgili konular