簡體   English   中英

Android:讓應用程序等到找到當前位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM