Android. Как узнать, определено ли местоположение от GPS или провайдера сети

Я пытаюсь реализовать приложение, которое определяет положение как от GPS, так и от поставщика сети и показывает его на карте Google. Мне это удалось, но у меня есть вопрос: я получаю поставщика в onCreate () моей Activity (он расширяет LocationListener)

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
location = locationManager.getLastKnownLocation(provider);

Он работает нормально, моя проблема в том, что при вызове onLocationChange () я должен действовать по-другому, если провайдер, который его вызвал, - это GPS или NETWORK. Есть ли способ узнать какой? Чтобы быть более ясным:

Когда вызывается onLocationChanged(Location location), есть ли шанс узнать, какой провайдер звонил? Я пробовал использовать if в строке поставщика, но похоже, что это не работает.


person user2153669    schedule 10.03.2013    source источник


Ответы (4)


Вам нужно знать поставщика местоположения (GPS, WIFI или сеть) или его точность?

getAccuracy()

Получите приблизительную точность этого местоположения в метрах.

Мы определяем точность как радиус уверенности 68%. Другими словами, если вы нарисуете круг с центром на широте и долготе этого местоположения и с радиусом, равным точности, то с вероятностью 68% истинное местоположение находится внутри круга.

Если вам действительно небезразличен поставщик, вы, вероятно, можете использовать _ 2_.

person Adam Matan    schedule 10.03.2013
comment
Спасибо. Я видел isProviderEnabled (), моя проблема в том, что они оба включены! Я должен знать, какой провайдер установил местоположение, чтобы делать разные вещи, будь то GPS или СЕТЬ. - person user2153669; 10.03.2013
comment
Вероятно, вы должны увидеть здесь подробный ответ: stackoverflow.com/questions/2021176/ - person Adam Matan; 10.03.2013

проверяем точность ‹= 30м:

boolean isGPS = (location.getAccuracy() <= 30);
person AlexWien    schedule 10.03.2013
comment
Спасибо. Я обнаружил, что есть метод (location.getProvider ()), который, кажется, делает то, что я хочу ... Я дам вам знать! - person user2153669; 10.03.2013

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

вы создали Provider в виде строки, просто используйте эту строку в коде, например if (provider.matches ("GPS")) {}

person Lakshay Jain    schedule 29.12.2015

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

Когда вызывается onLocationChanged (Location location), есть ли шанс узнать, какой провайдер сделал звонок?

Чтобы узнать, GPS_PROVIDER или NETWORK_PROVIDER это вызвало onLocationChanged, вы можете использовать метод getProvider() (или значение provider в Kotlin):

@Override
public void onLocationChanged(Location location){
    //obtain a string, 'gps' or 'network', from the location
    System.out.println(location.getProvider());
}

Или в Котлине:

override fun onLocationChanged(location: Location?) {
    println(location!!.provider)     
}

Ссылка на документ здесь

person DarkCygnus    schedule 05.06.2018