Android从GPS获取位置

3
我的情况是,用户一整天都带着他们的平板电脑,为了省电,它的 GPS 或位置可以一直关闭,然后想要使用我的应用程序发布内容,需要他们打开位置,然后在发布时我想获取设备的纬度和经度。使用 LocationManager 获取位置时,它的值为 null。非常感谢您的任何帮助。
我正在使用以下代码来获取位置:
LocationManager lm = (LocationManager)ctx.getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

根据我的调查,似乎我需要添加一个监听器来更新设备的位置,这样当我获取最后已知的位置时,它不会是空的。但如果在使用应用程序之前设备的位置已关闭,我该怎么办?我想要获取用户在使用应用程序发布时的位置。

编辑:我已将代码更改为下面的样子,但loc始终为空,loc2始终返回位置。为什么会这样呢?

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) {

    }
};
2个回答

1
你可能需要考虑使用网络位置和GPS位置,因为许多用户会关闭GPS以节省电池电量。如果将位置服务设置为“省电”模式,则设备可以使用Wi-Fi获取准确的地理位置数据(如果可用)。如果同时使用网络位置数据和GPS无线电数据,则在需要时更容易获得位置数据。但是,如果在使用您的应用程序发布帖子之前完全禁用了位置服务,则需要注册位置监听器以获取位置数据的第一个实例。请查看此帖子,了解如何同时使用网络和GPS位置:Android Location Manager, Get GPS location ,if no GPS then get to Network Provider location

谢谢Daniel,对于我的情况,用户是一位访客,他们会去商店,所以他们知道系统如何工作,设备用于这种情况,他们使用3G发送数据,因此基本上Wi-Fi不适用,但在发布时应该可以使用3G。 - arash moeen
丹尼尔,请检查我的编辑。 - arash moeen

0

GPS 很少在室内使用。如果您的用户“逛商店”,那么 GPS 提供者永远不会返回有效位置,因为室内没有 GPS 信号可用。

网络提供者同时使用 WiFi 和蜂窝塔,只要他们至少有蜂窝服务,您就应该返回一个位置。这就解释了为什么您总是能够使用网络提供者检索位置更新。

我建议您研究一下Fused Provider,这是 Google 发布的最新位置 API。该 API 将根据用户启用的设置和提供给用户的情况,自动处理 GPS、网络和被动位置侦听器之间的切换,并为您提供最佳数据。


好的,谢谢ori-k。我已经使用GPS和NETWORK实现了该系统,但大多数情况下只有网络能正常工作。 - arash moeen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接