Java 如何在Android中使用Wifi获取位置?

Java 如何在Android中使用Wifi获取位置?,java,android,android-location,location-provider,Java,Android,Android Location,Location Provider,我想通过Wifi获取位置,并在谷歌地图上工作,这对我来说不起作用,但Gps没问题 我的代码: locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); if (locationManager != null) { boolean gpsIsEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVI

我想通过Wifi获取位置,并在谷歌地图上工作,这对我来说不起作用,但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.
}
AndroidManifest:

<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" />

当wifi连接到互联网时,NewWork_提供程序为空。。如何解决问题


谢谢。

如果您已连接到WIFI,则只需使用网络提供商进行位置更新即可。它们将是快速和足够准确的

通常情况下,如果不需要如此频繁地更新位置,则同时从GPS和网络请求位置更新。每当您获得所需精度的位置更新时,请从侦听位置更新中注销

但如果需要经常更新位置,那么打电话给GPS也可能是电池的杀手,所以使用GPS提供商时要小心

GPS更新仅在开放天空下可用。GPS更新需要时间,需要电池,但更精确

网络更新速度更快,消耗的电池更少,但相对而言精确度较低。但如果我们谈论的是WIFI精度,它将接近50或100,可以满足许多实时要求

这一切都取决于您的要求。

比如,我可以为GPS_提供程序和网络_提供程序(或被动_提供程序)设置“请求位置更新”以进行相同的函数调用,如下所示:

// 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数据。

好吧,根据您的代码,在查找提供商时,GPS具有优先权。为什么wifi不工作且始终为空?我使用上面的链接GpsTracker,但网络提供商为空。。。完美的意图和任何问题:(参考这一条可能会有帮助…)。。。。