如何使用可用的Wifi、GSM或GPS获取粗略位置?

15

我的应用只需要在启动时获得粗略定位服务。

具体来说,我需要应用程序的大致位置,以便向用户提供附近商店的信息。

位置不需要一直更新。此外,在这种情况下,粗略定位就足够了。

我希望该应用程序能够自动选择GSM、Wi-Fi或GPS中可用的任何一种方式。

为了节省手机电量,定位服务也应该是一次性的。

我该怎么做呢?

我尝试过单独使用GPS。

我的问题是我不知道如何停止GPS的持续刷新位置功能。我也不知道如何让手机从三种方法中选择其中一种。

非常感谢提供一些示例代码或想法。


1
locationManager.requestLocationUpdates() 方法在再次请求位置之前需要最小距离和最小时间。请使用您需要的值。当您使用完毕后,请注销接收器以停止更新。 - Srikant Sahay
3个回答

21

以下是一种特定的观点:

private void _getLocation() {
    // Get the location manager
    LocationManager locationManager = (LocationManager) 
            getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(bestProvider);
    try {
        lat = location.getLatitude();
        lon = location.getLongitude();
    } catch (NullPointerException e) {
        lat = -1.0;
        lon = -1.0;
    }
}

这可能需要访问FINE_LOCATION权限。因此:

另一种方法是使用此应用,它使用LocationManager

最快的方法是使用Last Known location,我使用了它,速度相当快:

private double[] getGPS() {
 LocationManager lm = (LocationManager) getSystemService(
  Context.LOCATION_SERVICE);
 List<String> providers = lm.getProviders(true);

 Location l = null;

 for (int i=providers.size()-1; i>=0; i--) {
  l = lm.getLastKnownLocation(providers.get(i));
  if (l != null) break;
 }

 double[] gps = new double[2];
 if (l != null) {
  gps[0] = l.getLatitude();
  gps[1] = l.getLongitude();
 }

 return gps;
}

4
你可以使用 LocationClient,它提供了一个统一/简化的(Fused)位置API。查看这个 视频 以获取介绍材料和背景知识,或者查看这个 开发人员指南
主要缺点是使您的应用程序依赖于设备上是否存在 Google Play服务

1
为了从特定的提供者获取信息,您应该使用:LocationManager.getLastKnownLocation(String provider),如果您希望您的应用程序自动在提供者之间进行选择,则可以使用getBestProvider方法添加提供者的选择。至于停止刷新GPS位置,我没有完全理解。您是只需要一次性获取位置信息还是需要定期监控位置变化?

编辑:哦,顺便说一下,如果您希望您的位置信息保持最新状态,您应该使用位置管理器的requestSingleUpdate方法,并指定标准。在这种情况下,提供者也应该自动选择。

仅一次。即应用程序仅在首次启动时估计位置。用户稍后可以选择手动刷新位置。 - Sibbs Gambling

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