Android 从 GPS 获取位置

Posted

技术标签:

【中文标题】Android 从 GPS 获取位置【英文标题】:Android get location from GPS 【发布时间】:2015-05-17 04:08:43 【问题描述】:

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

我正在使用下面的代码来获取位置:

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

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

EDIT:我已将代码更改为以下,但 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) 

    
;

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢谢丹尼尔,在我的例子中,用户是访客,访问商店,所以他们知道系统是如何工作的,设备用于这种情况,他们使用 3G 发送数据,所以基本上 wi- fi 不在桌面上,但 3g 应该在发布时可用。 丹尼尔请检查我的编辑【参考方案2】:

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

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

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

【讨论】:

谢谢 ori-k,我已经使用 GPS 和 NETWORK 实现了系统,尽管大多数时候只有网络才能正常工作。

以上是关于Android 从 GPS 获取位置的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 地理定位插件无法从 Android 的 GPS 获取位置

在 android 中获取更新位置和禁用 GPS 后如何获取?

强制关闭 Android 位置权限

Android 使用GPS获取地理位置

在 Android Wear 设备上获取 GPS 位置

在Python中获取精确的Android GPS位置