我知道之前已经提到过,但所有可用的解决方案都要求我使用onLocationChanged()
方法,以便我可以使用getLatitude()
和getLongitude()
方法来获取坐标。
但是当我的设备位置发生变化时,将调用onLocationChanged()
。因此,为了获得我当前的位置,我将不得不移动我的设备。
但我想获得当前坐标而无需移动我的设备。另外我在某个地方读到我可以手动调用onLocationChanged()
方法,我可以再次获取最后一个已知位置,
最后一个已知位置可能不是我当前的位置吗?或者可以使用最后一个已知的位置解决方案吗?
这是我用来实现LocationListener的类的一部分。
public class MyLocListener extends MapsActivity implements LocationListener {
public void onLocationChanged(Location location)
{
if(location!=null)
{
MapsActivity.setLatitude(location.getLatitude());
MapsActivity.setLongitude(location.getLongitude());
}
}}
这是我用来为我的地图活动提供坐标的函数的覆盖。纬度和经度是两个双重类型变量。在这个类中,纬度和经度变量以0开始,并且它们保持这种方式,因为onLocationChanged()
函数仅在我的位置发生变化时被调用。因此,我无法在地图上看到我当前的位置。
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LocationManager myLocManager;
myLocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
MyLocListener loc = new MyLocListener();
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.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;
}
myLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, loc);
LatLng sydney = new LatLng(latitude, longitude);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
答案 0 :(得分:2)
您应该使用GooglePlayServices
compile 'com.google.android.gms:play-services-location:7.0.0'
获取位置
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}
连接后
public class MainActivity extends ActionBarActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}
}
}
有关详细信息,请查看documentation。
答案 1 :(得分:0)
将您的代码移动到更改位置内。由于获取位置是异步的,因此您的纬度和经度永远不会反映出来。根据需要优化初始化。
public class MyLocListener extends MapsActivity implements LocationListener {
public void onLocationChanged(Location location)
{
if(location!=null)
{
MapsActivity.setLatitude(location.getLatitude());
MapsActivity.setLongitude(location.getLongitude());
LatLng sydney = new LatLng(location.getLatitude(), location.getLongitude);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}
}}