簡體   English   中英

在獲取帳戶android的身份驗證令牌時顯示對話框

[英]Show dialog when getting auth token for account android

我決定從我的應用程序從帳戶管理器檢索google帳戶的身份驗證令牌時,顯示帶有消息“授權”的對話框,然后我要更新對話框設置消息“保存聯系人”,這時需要進行長時間的保存聯系人操作,但是當我想使它像我的“身份驗證”對話框下面的代碼中所示(它需要8秒鍾的黑屏,然后對話框出現一秒鍾然后關閉)。我正在處理程序線程中創建和更新對話框,該對話框綁定到UI線程(在onCreate方法中創建處理程序)。當我創建對話框時,UI線程似乎被阻塞了。 這是我的代碼:

public void gotAccount(final GoogleAccountManager googleAccountManager,
        final Account account)
{

    SharedPreferences settings = getSharedPreferences(PREF, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.putString("accountName", account.name);
    editor.commit();
    Log.i("gotAccount","start new thread");

    new Thread(new Runnable()
    {

        public void run()
        {
            Log.i("gotAccount-Thread run()","start show loading message");
            createLoadingMessage();
            Log.i("gotAccount-Thread run()","complete show loading message");
            Log.i("gotAccount-Thread run()","start getAuthToken");
            googleAccountManager.manager
            .getAuthToken(account, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>()
            {

                @Override
                public void run(AccountManagerFuture<Bundle> future)
                {
                    try
                    {
                        Log.i("gotAccount-run()","get auth token complete");
                        Log.i("callback-run()","start get result");
                        Bundle bundle = future.getResult();

                        if (bundle.containsKey(AccountManager.KEY_INTENT))
                        {
                            Intent intent = bundle
                                    .getParcelable(AccountManager.KEY_INTENT);
                            int flags = intent.getFlags();
                            flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
                            intent.setFlags(flags);
                            startActivityForResult(intent, REQUEST_AUTHENTICATE);

                        } else if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN))
                        {
                            createSaveContactsMessage();

                            setAuthToken(bundle
                                    .getString(AccountManager.KEY_AUTHTOKEN));

                            longOperation();
                            completeSave(getText(R.string.saved) + ": "
                                    + currentCount);

                        }
                    } catch (Exception e)
                    {
                        handleException(e);
                    }
                }

            },null);
        }
    }).start();
}

有簡單的方法來處理線程。 以AsyncTask為例,您可以在preExecute()中定義進度條,執行doInBackground()需要完成的工作,並在onPostExecute()中刪除對話框。

有關異步任務的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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