Android从GPS获取位置

时间:2015-03-14 19:24:28

标签: android gps locationmanager

我的情况就是用户整天都有他们的平板电脑,其gps或位置可以全天关闭以节省电池,然后想要使用我需要他们的应用程序发布内容打开位置然后发布我想获得设备的纬度经度。当我获得位置时,使用 LocationManager null 。任何帮助将不胜感激。

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

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

当我查看过时,似乎我必须设置一个监听器才能更新设备位置,所以当我得到最后一个已知位置时它不会为空,但是如果这样做我怎么能这样做在使用该应用程序之前,设备的位置是否已关闭?我想获得用户使用该应用程序发布的位置。

编辑:我已将代码更改为以下内容,但 loc 始终为null, 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 个答案:

答案 0 :(得分:1)

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

但是,如果在开启之前完全禁用了位置服务以便使用您的应用发布内容,那么您需要注册位置侦听器以获取第一个位置数据实例。

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

答案 1 :(得分:0)

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

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

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