Android:无需使用GPS或互联网即可获取用户的当前位置吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (71)

是否有可能获取用户的当前位置而不使用gpsinternet?我的意思是在移动网络提供商的帮助下。

提问于
用户回答回答于

你想要做的是使用LocationManager.NETWORK_PROVIDER而不是LocationManager.GPS_PROVIDER。在NETWORK_PROVIDER将解决在GSM或WiFi,这永远可用。显然无线网关,GSM将被使用。请记住,使用单元网络精确到基本500米。

在完成大部分代码之后OnCreate(),添加以下内容:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

你也可以让你的活动实现这个LocationListener类,从而onLocationChanged()在你的活动中实现。

用户回答回答于

请注意,这可能会启动提供商,但如果用户以前曾获得位置信息,我认为不会。这些文件并不太清楚。

根据文档getLastKnownLocation:

返回指示从给定提供者获取的最后一次已知位置定位数据的位置。这可以在不启动提供者的情况下完成。

这是一个快速片段:

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;

public class UtilLocation {
    public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location utilLocation = null;
        List<String> providers = manager.getProviders(enabledProvidersOnly);
        for(String provider : providers){

            utilLocation = manager.getLastKnownLocation(provider);
            if(utilLocation != null) return utilLocation;
        }
        return null;
    }
}

你还必须添加新的权限 AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

扫码关注云+社区