如何快速获取用户位置android

时间:2016-03-01 08:11:23

标签: android location

我需要在打开应用时如何快速获取用户当前位置。我知道获取用户当前位置的方法。但是需要一些时间来占据位置。如何改善?

3 个答案:

答案 0 :(得分:1)

试试这个 使用Google Play服务FusedLocationApi 它快速而可靠。 请参阅此处: - http://coderzpassion.com/android-location-using-google-play-services/

答案 1 :(得分:1)

您可以使用位置管理器。
这是代码。

double latitude;
double longitude;
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }

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

        public void onProviderEnabled(String provider) {
        }

        public void onProviderDisabled(String provider) {
        }
    };

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}

将上面的方法放在oncreate()中,你可能想要将经纬度转换为私有成员
您也可以通过LocationManager.GPS_PROVIDER更改LocationManager.NETWORK_PROVIDER,但这最后需要花费一些时间才能从GPS卫星获取数据。第一个(网络提供商)只需几秒钟即可获取当前位置,并且不要忘记将权限放入清单文件中

答案 2 :(得分:0)

获取用户位置所需的时间可能会有所不同,因为它取决于几个因素。 GPS卫星可用性,Wifi或蜂窝塔可用性以及设备质量可能会影响位置获取过程,因此您无法在此处执行任何操作来加速该过程。

如果您想知道用户的位置并且并不真正关心位置的准确性,那么您应该得到“最后一个位置”#34;用户。这将为您提供系统在设备上安装的任何应用程序发出的上次位置请求期间保存的位置。由于您已经在使用FusedLocationApi,因此可以执行以下操作以获取onConnected()回调中的最后位置。

@Override
public void onConnected(Bundle connectionHint) {
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
                mGoogleApiClient);
    if (mLastLocation != null) {
        // use the location
    } else {
        // in very rare case, last location can be null. In which case 
        // you have to request location update here
    }
}