检查GPS是在奇巧(4.4)

问题描述:

下面奇巧,我得到,如果GPS是与供应商名单检查GPS是在奇巧(4.4)

String providers = Secure.getString(context.getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED); 
if (TextUtils.isEmpty(providers)) { 
    return false; 
} 
return providers.contains(LocationManager.GPS_PROVIDER); 

但奇巧,Secure.LOCATION_PROVIDERS_ALLOWED已被弃用。

Javaodc说“使用Secure.LOCATION_MODE”,定位模式是初级讲座......

Secure.LOCATION_MODE_OFF 
Secure.LOCATION_MODE_SENSORS_ONLY 
Secure.LOCATION_MODE_BATTERY_SAVING 
Secure.LOCATION_MODE_HIGH_ACCURACY 

但我不知道到底是下面的代码是正确的。 (我没有kitkat设备)

int locationMode = Secure.getInt(context.getContentResolver(), Secure.LOCATION_MODE); 
boolean isGpsOn = locationMode != Secure.LOCATION_MODE_OFF; 

如果不正确,请回答正确的代码。

编辑

我知道LocationManager。但它需要ACCESS_FINE_LOCATION权限。 我不需要“访问”位置。

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
boolean isGpsOn = manager.isProviderEnabled(LocationManager.GPS_PROVIDER) 
+1

你的代码是正确的。你也可以使用模拟器来尝试4.4期货。 –

自答

@TargetApi(Build.VERSION_CODES.KITKAT) 
@SuppressWarnings("deprecation") 
public static boolean isGpsEnabled(Context context) { 

    if (PackageUtil.checkPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)) { 
     LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     return lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    } 

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
     String providers = Secure.getString(context.getContentResolver(), 
       Secure.LOCATION_PROVIDERS_ALLOWED); 
     if (TextUtils.isEmpty(providers)) { 
      return false; 
     } 
     return providers.contains(LocationManager.GPS_PROVIDER); 
    } else { 
     final int locationMode; 
     try { 
      locationMode = Secure.getInt(context.getContentResolver(), 
        Secure.LOCATION_MODE); 
     } catch (SettingNotFoundException e) { 
      e.printStackTrace(); 
      return false; 
     } 
     switch (locationMode) { 

     case Secure.LOCATION_MODE_HIGH_ACCURACY: 
     case Secure.LOCATION_MODE_SENSORS_ONLY: 
      return true; 
     case Secure.LOCATION_MODE_BATTERY_SAVING: 
     case Secure.LOCATION_MODE_OFF: 
     default: 
      return false; 
     } 
    } 
} 

而在你packageutils类添加这个方法:

public static class PackageUtil { 

    static boolean checkPermission(Context context, String accessFineLocation) { 

     int res = context.checkCallingOrSelfPermission(accessFineLocation); 
     return (res == PackageManager.PERMISSION_GRANTED); 

    } 

} 
+0

你好,我有同样的问题。但你的代码没有解决我得到的问题: - /我的Nexus5将显示每次我检查设置我的对话框启用GPS ... –

+0

PackageUtil给出错误。请更正或提供建议 –