在尝试使用GPS之前,如何检查GPS是否已启用

时间:2013-10-14 20:34:11

标签: android gps

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

如何执行以下操作:

  1. 检查GPS是否已启用
  2. 如果已启用GPS,请使用GPS,否则请使用网络提供商。
  3. 如果GPS耗时超过30秒,请使用网络。
  4. 我可以使用我自己的逻辑使用时间或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);
    

3 个答案:

答案 0 :(得分:10)

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

    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,通常标准指定弹出位置设置活动,以便用户可以专门启用它...

希望这有帮助。

问候!

答案 1 :(得分:8)

只需使用此功能,即可查看GPS可用性

    LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);;
    boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

答案 2 :(得分:1)

认为您可以使用我的答案中的代码:Location servise GPS Force closed

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