等待onLocationChanged(位置位置)

时间:2013-08-23 01:47:02

标签: java android android-asynctask location google-maps-android-api-2

我需要获取当前位置,之后 - 执行下一个代码。这个方法完成后我该怎么办? onLocationChanged自动调用,为什么我有问题。有人有任何想法如何更正确吗? 我在OnLocationChanged()打电话给onResume()时非常愚蠢,但这是个糟糕的主意。

    @Override
public void onLocationChanged(Location location) {

    final Location loc = location;

    Log.d("myLogs", "OnChange2");
    Log.d("myLogs", "2" + loc.getLatitude() + "," + loc.getLongitude());
    myLat = loc.getLatitude();
    myLong = location.getLongitude();
    onResume();

}

2 个答案:

答案 0 :(得分:2)

您可能希望使用AsyncTask。有关答案,请参阅Android find GPS location once, show loading dialog。基本上在onPreExecute中你可以开始对话(它在doInBackground被调用之前开始)。这意味着您要等到可以定位并显示对话框的时间。然后在doInBackground中,您可以获得该位置。完成后onPostExecute被调用。您可以从onPostExecute内停止。您可以检查位置是否为空,然后如果需要,还可以从onPostExecute内部调用其他功能。

这可能是一种方式。您可以从AsyncTask Android example学习一个基本示例。您也可以先阅读文档here并阅读How to Get GPS Location Using AsyncTask?

其他一些类似的有用问题:

Wait for current location - GPS - Android Dev

getting location instantly in android

希望这有帮助。

答案 1 :(得分:0)

我意识到OP已经接受了上述答案,但我有一种感觉OP想要一个更简单的答案。

我假设OP有一个带有Activity的android应用程序。我这样宣告我的:

public class HelloAndroidActivity extends Activity implements LocationListener {

OP对于生命周期方法如何工作以及何时应该完成工作感到困惑。我的简历和暂停方法如下所示:

@Override
protected void onPause() {
    ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).removeUpdates(this);
    super.onPause();
}

@Override
protected void onResume() {
    ((LocationManager)getSystemService(Context.LOCATION_SERVICE)).requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 1000, 1, this);
    super.onResume();
}

请注意,我的onResume要求在有位置更新时通知我,并且onPause方法要求我不再收到通知。你应该小心不要在你真正需要的时间间隔内要求更新,否则你会耗尽你的电池。

由于活动实现了LocationListener,我的onLocationChanged方法如下所示:

@Override
public void onLocationChanged(Location location) {
    // Update the location fields
    ((EditText)findViewById(R.id.latField)).setText(Double.toString(location.getLatitude()));
    ((EditText)findViewById(R.id.longField)).setText(Double.toString(location.getLongitude()));
}

这只是获取新位置并更新我在活动中的一些文本EditText字段。我唯一需要做的就是将GPS权限添加到我的清单中:

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

因此,如果我问如何开始使用位置管理器和位置服务,这将是我将如何开始。我不是试图从接受的答案中拿走任何东西,我只是认为在onResume和onLocationMethodChanged方法中有什么做了根本的误解。