如何判断Android设备是否能够提供位置?

时间:2010-11-30 21:42:42

标签: android

我正在编写一个地理应用程序并且一切运行良好,但我正在考虑它如何在没有GPS或3G的设备上工作,并且wifi可能关闭或不提供位置信息。< / p>

我最好的选择就是请求更新位置(或使用最后一次更新)并假设有办法获取位置(无论是GPS还是网络),或者框架是否包含查看可用内容的方法,并避免地理查找延迟?

我想在没有GPS的设备上我的应用程序应该为用户提供用户指定位置的UI,并在sharedprefs中记住它,这样他们就不必再重新输入它了(我在想像谷歌电视和平板电脑)。

我很欣赏有关如何在具有不同地理意识水平的各种设备的环境中处理获取位置的过程以及如何处理该建议的建议。

2 个答案:

答案 0 :(得分:1)

您可以调用LocationManager.getAllProviders()来检索所有位置提供程序,或调用LocationManager.getProviders(true)来检索有效的位置提供程序。

boolean hasActiveLocationProvider = false;
LocationManager locationManager = Context.getSystemService(Context.LOCATION_SERVICE);
List<String> providers = locationManager.getProviders(true);
for (String providerName:providers) {
  if (providerName.equals(LocationManager.GPS_PROVIDER) 
      || providerName.equals(LocationManager.NETWORK_PROVIDER)) {
    hasActiveLocationProvider = true;
  }
}

http://developer.android.com/reference/android/location/LocationManager.html

答案 1 :(得分:0)

延长aleung和Ollie的答案,这对我来说最有效。可能还需要填补一些空白。

private boolean hasActiveLocationProvider(Context context) {
    LocationManager locationManager = (LocationManager) context
            .getSystemService(Context.LOCATION_SERVICE);
    List<String> providers = locationManager.getProviders(true);
    for (String providerName : providers) {
        if (providerName.equals(LocationManager.GPS_PROVIDER)) {
            return true;
        }
        if (providerName.equals(LocationManager.NETWORK_PROVIDER)) {
            ConnectivityManager cm = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            boolean isConnected = cm.getActiveNetworkInfo() != null
                && cm.getActiveNetworkInfo().isConnectedOrConnecting();
            if (isConnected) {
                return true;
            }
        }
    }
    return false;
}