1

我需要获取当前位置,然后 - 执行下一个代码。此方法完成后,我该如何等待?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();

}
4

2 回答 2

2

您可能想使用AsyncTask它。请参阅Android 查找 GPS 位置一次,显示加载对话框以获取答案。基本上onPreExecute你可以开始对话框(它在doInBackground被调用之前开始)。这意味着您正在等到可以定位并显示对话框的时间。然后在doInBackground你可以得到位置。之后onPostExecute调用完成。你可以停止的是从里面onPostExecute。您可以检查位置是否不为空,然后根据需要从内部调用其他函数onPostExecute

这可能是一种方式。您可以从AsyncTask Android 示例中学习一个基本示例。您也可以先阅读此处的文档并阅读如何使用 AsyncTask 获取 GPS 位置?.

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

等待当前位置 - GPS - Android Dev

在android中立即获取位置

希望这可以帮助。

于 2013-08-23T01:58:57.753 回答
0

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

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

public class HelloAndroidActivity extends Activity implements LocationListener {

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

@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 方法中应该做什么存在根本性的误解。

于 2013-08-23T21:15:54.913 回答