Android 从 GPS 获取位置

Android get location from GPS

我的情况就像用户整天带着他们的平板电脑,其 gps 或位置可以一直关闭以节省电量,然后想要post 使用我的应用程序的东西需要他们打开位置然后在 posting 时我想获得 latitudelongitude的设备。使用 LocationManager 当我得到 location 它的 null。任何帮助将不胜感激。

我正在使用以下代码获取位置:

LocationManager lm = (LocationManager)ctx.getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

我四处查看了一下,似乎我必须放一个监听器来更新设备位置,这样当我得到最后一个已知位置时它就不会为空,但是如果设备的位置我该怎么做在使用应用程序之前关闭?我想获取用户使用该应用程序 post 的位置。

EDIT:我已将代码更改为以下内容,但 loc 始终为 null,并且 loc2 总是 returns 位置。这是为什么?

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Location loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location loc2 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

这是听众:

LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {

    }

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

    }

    public void onProviderEnabled(String provider) {

    }

    public void onProviderDisabled(String provider) {

    }
};

您可能需要考虑使用网络定位和 GPS 定位,因为许多用户只是关闭 GPS 无线电以节省电量。 将定位服务设置为 "Battery Saving" 模式后,设备可以使用可用的 Wi-Fi 获取准确的地理位置数据。
如果您使用网络位置数据和 GPS 无线电数据,您将有更好的机会在需要时获取位置数据。

但是,如果定位服务在打开之前被完全禁用以便post使用您的应用程序,那么您将需要注册一个位置侦听器以获取位置数据的第一个实例。

看看这个 post 了解如何同时使用网络和 GPS 位置: Android Location Manager, Get GPS location ,if no GPS then get to Network Provider location

GPS 很少在室内工作。如果您的用户 "visiting shops" 那么 GPS 提供商永远不会 return 有效位置是有道理的,因为室内没有可用的 GPS 信号。

网络提供商同时使用 Wifi 和手机信号塔,因此只要他们至少有手机服务,您就应该 return 一个位置。这就解释了为什么您始终能够通过网络提供商检索位置更新。

我建议您查看 Fused Provider,这是 Google 发布的最新位置 API。此 API 将根据用户启用的设置以及根据用户情况提供最佳数据的提供商,自动为您处理 GPS、网络和被动位置侦听器之间的切换。