3

我正在开发一个 android 应用程序,它将每 30 秒检索一次数据并发送到服务器,因此需要移动互联网。

目前,我正在使用 GPS,但我也想使用网络提供商(wifi 和手机信号塔)。

但我的问题是android如何通过wifi检索位置信息?如果可以从 wifi 检索位置,那么可以从我的移动互联网本身检索它吗?

如果没有,那为什么?如果是,那么向我展示一些代码片段以从移动互联网检索位置更新,以及大概的准确度是多少?我需要精度在 100 米以内。

我遵循了这些并得到了这个疑问http://developer.android.com/guide/topics/location/strategies.html android 应用程序是否能够从连接的 WiFi 热点 AP 中检索位置信息?

4

1 回答 1

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 网络,请先查看此处,然后再执行上述代码:

获得您想要的东西的一种特定方法如下:

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

我希望所有这些信息对你有用。

于 2013-08-16T08:14:31.803 回答