Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-关于LocationManager的澄清_Java_Android_Gps_Locationmanager - Fatal编程技术网

Java Android-关于LocationManager的澄清

Java Android-关于LocationManager的澄清,java,android,gps,locationmanager,Java,Android,Gps,Locationmanager,我使用以下代码获取位置: LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); Location location = locationManager.getLa

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

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 ();
我有很多问题:

如果GPS关闭,是否使用网络位置?若否,如何落实?

如果启用GPS,是否总是忽略网络位置而使用它?若否,如何落实?

如果可用,它是否使用最精确的方法获取纬度和经度?若否,如何落实?


提前感谢您的澄清。

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

对于第一个问题,如果为GPS位置管理器创建LocationListener,则可以使用public void onProviderDisabledString提供程序{}尝试改用网络位置

// 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);
您可以同时使用GPS和网络定位,但通常更适合决定哪一种更适合您的情况,并权衡每种方法的优缺点。有很多StackOverflow页面,这里有一个

与2类似,您应该能够跟踪GPS和/或网络位置,生成两个精度值,并比较和使用最适合您的精度值


我强烈建议查看开发者API指南以了解更多信息

与为GPS位置声明的方法相同,为网络位置创建另一个。您可以使用布尔值或其他值,通过使用locationLisener onProviderDisabledString提供程序检查GPS提供程序是否已启用。然后检查此布尔值,查看是否应使用网络位置管理器来管理位置数据。