在AndEngine游戏引擎旁边使用LocationListener

时间:2011-03-11 17:30:43

标签: android geolocation locationlistener andengine

嘿,我正在研究如何将AndEngine与手机的GPS位置一起使用。我认为访问这些信息应该不会太难,所以我抓住了ChangeableText示例并试图调整它以便我可以看到它正确地抓住了位置,基本上我所做的是:< / p>

将“实现LocationListener”添加到类声明

    public class ChangeableTextExample extends BaseExample implements LocationListener{

将位置变量和位置管理器添加到类字段中:

private long curlat;
private long curlng;
private LocationManager locationManager;

在onLoadScene()方法中实例化了locationManager:

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

设置elapsedText以打印出curlat和curlng变量:

     scene.registerUpdateHandler(new TimerHandler(1 / 20.0f, true, new ITimerCallback() {
        public void onTimePassed(final TimerHandler pTimerHandler) {
            elapsedText.setText("Location: " + curlat + ", " + curlng);
            fpsText.setText("FPS: " + fpsCounter.getFPS());
        }
    }));

并实现onLocationChanged(Location arg)方法,以便更新curlat,curlng字段。

public void onLocationChanged(Location location) {
    this.curlat = (long) (location.getLatitude()*1E6);
    this.curlng = (long) (location.getLongitude()*1E6);     
}

可悲的是,这不起作用,我想知道你们中是否有人能指出我正确的方向?我对Android的编程很新,甚至更新的AndEngine编程。我猜它与locationManager没有正确实例化的事实有关?

谢谢!

2 个答案:

答案 0 :(得分:1)

请参阅Android - obtaining user location

您必须实际告诉locationManager对象为您提供更新(以及在AndroidManifest.xml中为位置信息添加权限)。

从链接中,这是你缺少的东西:

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

对于AndroidManifest.xml(如果您宁愿使用不太准确的网络/ wifi位置而不是GPS,则可能需要更改权限):

<manifest ... >
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
</manifest>

答案 1 :(得分:1)

顺便说一句,您可以使用Engine / BaseGameActivity类的enableLocationSensor让AndEngine为您管理位置检索。