我正在开发一个Android应用程序,每30秒检索一次数据并发送到服务器,因此需要移动互联网。
目前,我正在使用GPS,但我也想使用网络提供商(wifi和手机信号塔)。
但我的问题是android如何通过wifi检索位置信息? 如果可以从wifi检索位置,那么可以从我的移动互联网本身检索它吗?
如果没有那么为什么? 如果是,那么请告诉我一些代码片段,以便从移动互联网上检索位置更新,还有什么可以达到近似准确度?我需要精度在100米以内。
我遵循这些并得到了怀疑http://developer.android.com/guide/topics/location/strategies.html Is android application able to retrieve location info from connected WiFi hotspot AP?
答案 0 :(得分:5)
要从NETWORK_PROVIDER检索位置,您可以使用以下内容:
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
timer1.cancel();
locationResult.gotLocation(location);
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
LocationManager lm;
if(lm==null)
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
这是一个基本的例子,所以为了区分wi-fi和3G网络,首先看看here,然后在上面的代码之前做:
获得所需内容的一种方式如下:
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
State mobile = conMan.getNetworkInfo(0).getState();
State wifi = conMan.getNetworkInfo(1).getState();
之后,您可以通过以下方式区分它们:
if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) {
//mobile
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
//wifi
}
检查手机或wifi是否连接,如果是wifi - 然后使用PASSIVE_PROVIDER
,如果移动 - 使用NETWORK_PROVIDER
。
我希望所有这些信息都对您有用。