2010-11-30 2 views
1

Я пишу geo-приложение, и все это работает хорошо, но я рассматриваю, как он будет работать на устройствах, которые не имеют GPS или 3G, а Wi-Fi может отключить или не предоставлять информацию о местоположении.Как узнать, сможет ли Android-устройство предоставить местоположение?

Лучше всего просто запросить обновление местоположения (или использовать последнее известное) и предположить, что есть способ получить местоположение (будь то GPS или сеть), или же в рамке есть способ увидеть, что доступно, и избежать задержки гео-поиска?

Я полагаюсь на устройство без GPS. Мое приложение должно предоставить пользовательский интерфейс для указания местоположения, и помните его в sharedprefs, чтобы им не пришлось повторно вводить его (я думаю, устройства как Google TV, и планшеты).

Я был бы признателен за рекомендации относительно того, как обрабатывать процесс приобретения местоположения в контексте различных устройств, которые имеют разные уровни геоинформации и как справиться с этим.

ответ

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

+0

Похоже, что это только говорит мне, какие теоретические поставщики существуют, а не то, что на самом деле доступно сейчас. например если я запустил вышеуказанный код на устройстве с GPS и отключил всю сеть, он все равно возвращает два элемента: GPS и NETWORK. Мне нужно более подробно, чем это, мне нужно знать, какие из них доступны или, по крайней мере, включены, есть ли API для этого? – 2011-01-20 17:16:11

0

Продление aleung-х и ответ Олли это то, что работает лучше для меня. Может быть еще несколько пробелов для заполнения.

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; 
} 
Смежные вопросы