在Android中使用google maps api更改OnLocation

时间:2017-05-09 09:58:48

标签: android google-maps

我使用谷歌地图标记作为我当前的位置我能够检索当前的纬度和经度位置但是如何在更改时获取更新的位置。我写了一个单独的类跟踪当前位置并在主Activity中调用了类,我使用googleApi客户端显示标记现在问题是如何在此主活动类中更改位置时如何更改标记

3 个答案:

答案 0 :(得分:3)

当您从不同的班级跟踪您的位置时。你可以创建自己的监听器来监听主类中的位置变化

首先创建位置更改侦听器

public interface LocationListener {
    public void onLocationReceived(Location location);
}

在你的调用中实现这个监听器

public class MainActivity extends Activity implement LocationListener{
     public void onLocationReceived(Location location){
     // update your map pin here 
    }
}

从mainactivity调用您的位置类时,会将位置更改的侦听器传递给该类 像那样

LocationClass class = new LocationClass(this);
在LocationClass中

添加一个costructor

LocationListener listener;
public LocationClass (LocationListener listener){
this.listener = listener;
}

现在无论何时获得新位置,都可以调用此函数

this.listener.onLocationReceived(location);

它适用于你的情况。

您还有其他选择,例如您可以在自己的活动中实施Google的位置监听器

答案 1 :(得分:0)

@ user1335906您可以参考下面的链接,经常获取位置更新...

<foreignObject>

1)首先,您需要使用以下方法连接谷歌服务:

https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates

2)成功连接到谷歌服务后,使用以下方法设置您的locationRequest对象:

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
}

2)您将通过以下方法获得频繁的位置更新:

public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1500); // this will give location update after 1500 miliseconds, set it according to your requirement
    mLocationRequest.setSmallestDisplacement(0.5f); // this will calculate distance between your previous and current location, if it is greater then 0.5 meter this method will be triggered.
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); // set location accuracy level as per app requirement.
}

所以试一试,如果你没有得到它,请告诉我......

答案 2 :(得分:0)

通常,当您添加标记时,您可以引用标记。

Marker marker = mGoogleMap.addMarker(...)

因此,当您收到位置更改时,只需更改其位置

即可
marker.setPosition(new LatLng(...));
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(...));

这将为地图设置动画并移动到位置更改,但标记不会设置动画。如果距离很长,则标记从一个地方跳到另一个地方。因此,如果您想要为标记设置动画,请使用ValueAnimator为标记设置动画。