我需要获取当前位置,之后 - 执行下一个代码。这个方法完成后我该怎么办? 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();
}
答案 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方法中有什么做了根本的误解。