11

我有以下代码,它不好,因为有时 GPS 需要很长时间

我该如何执行以下操作:

  1. 检查是否启用了 GPS
  2. 如果启用了 GPS,则使用 GPS,否则使用网络提供商。
  3. 如果 GPS 时间超过 30 秒,请使用网络。

我可以使用 time 或 Thread.sleep 用我自己的逻辑来做到这一点,但我认为可能有更标准的方式

// Acquire a reference to the system Location Manager
            LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

            // Define a listener that responds to location updates
            LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location location) {
                  // Called when a new location is found by the network location provider.
                    locationCallback(location);
                }

                public void onStatusChanged(String provider, int status, Bundle extras) {}

                public void onProviderEnabled(String provider) {}

                public void onProviderDisabled(String provider) {}
              };

            // Register the listener with the Location Manager to receive location updates
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
4

3 回答 3

11

没有标准方法,您必须在以下帮助下自行完成:

    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
        //Do what you need if enabled...
    }else{
        //Do what you need if not enabled...
    }

清单中的此权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

如果 GPS 未启用,作为建议,通常标准指定弹出位置设置活动,以便用户可以专门启用它...

希望这可以帮助。

问候!

于 2013-10-14T20:39:12.587 回答
10

只需使用它,您就可以检查GPS可用性

    LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);;
    boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
于 2013-10-14T20:38:45.367 回答
1

认为您可以在我的回答中使用代码:位置服务 GPS 强制关闭

它为您提供了一个非常方便的 GPS 首次定位和位置更改的回调方法。如果 GPS 需要很长时间才能获得第一个修复,这也使得更改 GPSTracker 的实现以切换到网络变得容易。

于 2013-10-14T20:42:16.410 回答