Как проверить наличие датчика GPS? - PullRequest
5 голосов
/ 17 февраля 2011

Я пишу метод, который будет возвращать true, если датчик GPS присутствует и включен, но возвращает false, если он отсутствует или выключен. Это тяжело, потому что ...

hasSystemFeature("FEATURE_LOCATION_GPS")  // on PackageManager

Возвращает false независимо от того, есть ли у устройства GPS или нет. Так что даже на устройстве, у которого оно есть, и оно включено, оно все равно возвращает false. Мне кажется это совершенно неправильным, но я не понимаю, почему.

isProviderEnabled("gps")   // on LocationManager

Возвращает true, даже на устройстве, которое у меня есть, у которого вообще нет оборудования GPS. Это также кажется совершенно нелогичным.

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

Чего мне не хватает?

Ответы [ 3 ]

14 голосов
/ 17 февраля 2011

Это должно работать. Есть ли какие-либо сообщения об ошибках в logcat, когда вы делаете этот вызов?

PackageManager pm = getPackageManager();
boolean hasGps = pm.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS);
2 голосов
/ 07 апреля 2013

В случае, когда устройство не имеет оборудования GPS, верно следующее:

locationManager.getProvider(LocationManager.GPS_PROVIDER) == null;

Где

LocationManager locationManager = (LocationManager) AppCore.context().getSystemService(Context.LOCATION_SERVICE);

В моем случае * hasSystemFeature (PackageManager.FEATURE_LOCATION_GPS) * возвращает trueдаже если устройство не имеет GPS.Так что это не надежно.

1 голос
/ 17 февраля 2011

Ваш hasSystemFeature(), вероятно, всегда возвращает false, потому что FEATURE_LOCATION_GPS является ссылкой на константу, а не строковым литералом.Я считаю, что текущий строковый литерал, на который он указывает, на самом деле является «android.hardware.location.gps».

Я считаю, что вы ищете что-то вроде этого:дополнительно о AlertDialog, чтобы указать, что вы можете напрямую перевести пользователя на страницу настроек местоположения, чтобы они могли включить GPS с помощью действия Settings.ACTION_LOCATION_SOURCE_SETTINGS Намерение.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...