![](/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.