2

我的应用程序应该使用或找到当前位置GPS。我可以通过以下方式轻松找到当前位置Cellular networkWiFiGPS

LocationManager locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationlistener = new mylocationlistener();
locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationlistener);

功能mylocationlistener()如下

private class mylocationlistener implements LocationListener {
  @Override
  public void onLocationChanged(Location location) {
      if (location != null) {
      Toast.makeText(LocationActivity.this,"latitude: "+
          location.getLatitude() + "longitude: " + location.getLongitude(),
          Toast.LENGTH_LONG).show();
      }
  }

它工作正常。我可以使用蜂窝网络通过上面的代码找出我需要更改的当前位置locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationlistener);

没关系,但我的挑战是

  1. 我需要找到 GPS 信号强度才能激活 GPS。如果 GPS 信号强度很差,我将无法激活 GPS,因为它会耗尽电池电量。
  2. 如果 GPS 信号很差,我必须通过蜂窝网络或 WiFi 找出当前位置。

所以,我的问题是,是否有任何方法可以在不打开的情况下确定 GPS 信号强度GPS?感谢您提前提供任何帮助。

4

1 回答 1

2

不,您无法确定未打开的传感器的信号强度。

要确定卫星和手机等GPS单元之间的信号强度,两者需要收发GPS信号,这自然需要手机上的GPS开启。

这与您无法在不打开 WiFi 的情况下列出附近可用的 WiFi 网络的逻辑相同。

您最好的选择是暂时打开它,然后在您决定不使用它时将其关闭。

确定是否使用 GPS 的最简单方法是将其打开,然后使用 LocationManager 的getBestProvider方法。如果最好的提供商不是 GPS,请再次将其关闭。您还可以使用 getGpsStatus 方法获取GpsStatus对象,其中包含最大卫星数和接收修复所需的时间等指标。

有关如何启用/禁用 GPS 的信息,请参阅像 Tasker 一样以编程方式启用 GPS。遗憾的是,您只能在 2.3 之前的手机上以编程方式执行此操作,并且只能通过漏洞利用。“正确”的方式是提示用户启用或禁用它。

于 2012-07-17T02:13:47.910 回答