Как получить местоположение с помощью Wi-Fi на Android?

Я хочу получить местоположение с помощью Wi-Fi и работать на карте Google, и это не работает для меня, но с GPS все в порядке и не проблема.

мой код:

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

if (locationManager != null) {
    boolean gpsIsEnabled = locationManager
            .isProviderEnabled(LocationManager.GPS_PROVIDER);
    boolean networkIsEnabled = locationManager
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    if (gpsIsEnabled) {
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 5000L, 10F,
                (android.location.LocationListener) this);
    } else if (networkIsEnabled) {
        locationManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 5000L, 10F,
                (android.location.LocationListener) this);
    } else {
        // Show an error dialog that GPS is disabled...
    }
} else {
    // Show some generic error dialog because something must have gone
    // wrong with location manager.
}

AndroidМанифест:

<uses-library android:name="com.google.android.maps" />

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzaSyB4C_zHeHYMTWqW4_Wpin-5jLF9S54KDSQ" />
</application>

<permission
android:name="com.karyan.karyanmap.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />

<uses-permission android:name="com.karyan.karyanmap.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission    android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"  />

<uses-feature android:name="android.hardware.wifi" android:required="true"/>
<uses-feature
android:name="android.hardware.camera"
android:required="false" >
</uses-feature>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

Newtork_Provider имеет значение null, когда Wi-Fi подключен к Интернету. Как решить проблему

Спасибо..


person sr.farzad    schedule 16.09.2013    source источник
comment
Ну, согласно вашему коду, GPS имеет приоритет при поиске поставщиков.   -  person Tassos Bassoukos    schedule 16.09.2013
comment
почему wifi не работает и всегда нулевой?   -  person sr.farzad    schedule 16.09.2013
comment
stackoverflow.com/questions/17668917/   -  person LuigiPower    schedule 16.09.2013
comment
я использую приведенную выше ссылку GpsTracker, но Nework_Provider имеет значение Null ... Интернет в идеальном состоянии и любая проблема :(   -  person sr.farzad    schedule 16.09.2013
comment
обратитесь к этому, может быть полезно.... stackoverflow.com/questions/18419695/   -  person Aravin    schedule 16.09.2013
comment
это не работает, потому что Wi-Fi отсутствует по ссылке   -  person sr.farzad    schedule 16.09.2013
comment
@sr.farzad, эй, можешь рассказать, как ты решил свои проблемы?   -  person Gowthaman M    schedule 23.01.2018


Ответы (2)


Если вы подключены к WIFI, просто используйте NETWORK PROVIDER для обновления вашего местоположения. они будут быстрыми и достаточно точными.

как правило, если обновления местоположения не требуются так часто, то обновления местоположения запрашиваются как из GPS, так и из СЕТИ одновременно. всякий раз, когда вы получаете обновление местоположения с желаемой точностью, отмените регистрацию от прослушивания обновлений местоположения.

Но если обновления местоположения требуются часто, вызов GPS также может быть УБИЙЦОЙ АККУМУЛЯТОРА, поэтому будьте осторожны с использованием GPS PROVIDER.

Обновления GPS доступны только под открытым небом. Обновления GPS требуют времени, батареи, но более точны.

Сетевые обновления выполняются быстрее, потребляют меньше энергии, но сравнительно менее точны. Но если мы говорим о точности WIFI, она будет около 50 или 100, что может удовлетворить многие требования в реальном времени.

Все зависит от вашего требования.

person Piyush    schedule 16.09.2013

Скажем, могу ли я настроить «запрос обновления местоположения» для GPS_PROVIDER и NETWORK_PROVIDER (или PASSIVE_PROVIDER) на один и тот же вызов функции, например:

// SETUP Location Manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, this);

В этом случае я получаю только данные GPS.

person Ifgeny87    schedule 08.11.2013