Android - 关于LocationManager的说明

时间:2014-08-08 13:41:07

标签: java android gps locationmanager

我使用以下代码获取职位:

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(bestProvider);
Double lat = location.getLatitude ();
Double lon = location.getLongitude ();

我有很多问题:

  1. 如果GPS已关闭,是否使用网络位置?如果不是,如何实现?

  2. 如果GPS已启用,是否始终使用它忽略网络位置?如果不是,如何实现?

  3. 是否使用最精确的方法获取纬度和经度?如果不是,如何实现?

  4. 提前感谢您的澄清。

1 个答案:

答案 0 :(得分:0)

您可以创建一个位置侦听器,可用于回答问题1。如果启用或禁用了提供程序,则位置侦听器可以响应位置更改,状态更改。

  1. 对于您的第一个问题,如果您为GPS位置管理器创建LocationListener,则可以使用public void onProviderDisabled(String provider) {}来尝试使用网络位置。

    // 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.
          makeUseOfNewLocation(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.NETWORK_PROVIDER, 0, 0, locationListener);
    
  2. 您可以同时使用GPS和网络位置,但通常更适合决定哪种情况会更好,并减轻每种情况的利弊。 (有很多StackOverflow页面,这里有一个Android Location Providers - GPS or Network Provider?

  3. 与#2类似,您应该能够跟踪GPS和/或网络位置,并生成两个准确度值,并对您进行比较和使用,这是最准确的。

  4. 我强烈建议查看Developer API指南以获取更多信息。 (http://developer.android.com/guide/topics/location/strategies.html