如何在 Android 中通过 Wifi 获取位置?
Posted
技术标签:
【中文标题】如何在 Android 中通过 Wifi 获取位置?【英文标题】:How to get Location with Wifi in Android? 【发布时间】:2013-09-20 12:37:50 【问题描述】:我想通过 Wifi 获取位置并在 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.
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 连接到 Internet 时 Newtork_Provider 为空。如何解决问题
谢谢..
【问题讨论】:
好吧,根据您的代码,GPS 在寻找提供商时具有优先权。 为什么wifi不工作而且总是空? ***.com/questions/17668917/… 我使用上面的链接 GpsTracker 但 Nework_Provider 是空的......完美的互联网和任何问题:( 推荐这个可能有帮助....***.com/questions/18419695/… 【参考方案1】:如果您已连接到 WIFI,则只需使用 NETWORK PROVIDER 即可更新您的位置。它们也将足够快且足够准确。
通常,如果不需要如此频繁地更新位置,则同时从 GPS 和 NETWORK 请求位置更新。每当您获得所需精度的位置更新时,请从侦听位置更新中取消注册。
但是,如果需要频繁更新位置,那么调用 GPS 也可能是电池的杀手,因此请小心使用 GPS PROVIDER。
GPS 更新仅在开阔的天空下可用。 GPS 更新需要时间,需要电池,但更准确。
网络更新更快,消耗更少的电池,但相对不太准确。但如果我们谈论的是 WIFI 精度,它将接近 50 或 100,可以满足许多实时要求。
这一切都取决于您的要求。
【讨论】:
【参考方案2】:说,我可以为 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 数据。
【讨论】:
以上是关于如何在 Android 中通过 Wifi 获取位置?的主要内容,如果未能解决你的问题,请参考以下文章