![](/img/trans.png)
[英]How to make a fragment wait to the current location in Android Kotlin
[英]Android : Make application wait till the current location is found
我正在尝试让我的应用程序等到找到当前位置。 我尝试过使用Threads
几种不同方式,但都失败了。 我正在使用wait()
和notify()
但是应用程序只是挂起并且从未找到当前位置。
我不使用谷歌地图api,因为它不是应用程序的一部分。 有没有人有任何想法如何做到这一点或例子。
编辑:我使用的Thread
没有启动,直到用户按下按钮然后在onLocationChanged
处理其他数据,例如将新位置添加到ArrayList,计算当前和最后一个位置之间的距离以及到达新的位置
您可以尝试在onCreate
启动AsyncTask
来获取位置。 您的默认onCreate
布局可能是一个“加载”页面,然后当您的AsyncTask
成功完成该位置时,它会绘制您的“真实”UI。
所以,如果我理解你想要正确做什么,那么我会避免在onClick()
创建另一个线程。 相反, onClick()
应该只是请求一个位置,显示一个进度对话框,然后返回。 由于你想要做的工作是在你收到新位置后发生的,我会在那里开始一个AsyncTask。 然后,当AsyncTask完成时,最后删除对话框(删除它将控件返回给用户)。
代码通常有帮助,所以,我会把它放在onCreate()
或任何地方:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.refresh();
}
});
并将其放在LocationListener中:
public void refresh() {
myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
myDialog = new ProgressDialog(myContext);
myDialog.setIndeterminate(true);
myDialog.show();
}
@Override
public void onLocationChanged(Location location) {
// now do work with your location,
// which your probably want to do in a different thread
new MyAsyncTask().execute(new Location[] { location });
}
然后你需要一个AsyncTask,它可能看起来像这样:
class MyAsyncTask extends AsyncTask<Location, Void, Void> {
@Override
protected Void doInBackground(Location... location) {
// start doing your distance/directions/etc work here
return null;
}
@Override
protected void onPostExecute(Void v) {
// this gets called automatically when you're done,
// so release the dialog box
myDialog.dismiss();
myDialog = null;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.