通过3g更新位置

时间:2013-08-16 07:45:32

标签: android gps android-wifi android-internet

我正在开发一个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?

1 个答案:

答案 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

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