首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android中显示一个进度条,同时等待收到短信5分钟?

如何在android中显示一个进度条,同时等待收到短信5分钟?
EN

Stack Overflow用户
提问于 2012-06-13 12:17:35
回答 2查看 1.4K关注 0票数 2

我的问题

在等待收到短信时,如何在android中显示进度条?

该对话框应满足以下条件

  • 对话框最多应该被关闭5分钟。如果在5分钟前收到短信,对话应该被
  • 取消。

我试过什么

代码语言:javascript
复制
public class GetSMS extends Activity {
   ...
   ...
   private boolean progressDialogFlag;
   private ProgressDialog progressDialog;
   ...
   ...
   new SMSReceiver().execute();
}

public class SMSReceiver extends AsyncTask<Void, Integer, Void> {
    protected void onPreExecute() {
        // start a progressdialog box
        super.onPreExecute();
        progressDialogFlag = true;
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage("Waiting to Receive SMS...");
        progressDialog.setCancelable(false);
        progressDialog.show();

    }

    protected void onProgressUpdate(Integer... progress) {
        super.onProgressUpdate(progress);
        if (progressDialogFlag == true) {
            progressDialog.setProgress(progress[0]);
        }
        if (progress[0] == 100 || progressDialogFlag == false) {
            progressDialog.dismiss();
        }
    }

    protected void onPostExecute(Void result) {

    }

    @Override
    protected Void doInBackground(Void... params) {
        int interval = 2;
        int totalDuration = 5 * 60 * 1000; // 5 min
        int sleepPeriod = (totalDuration / 100) * interval;
        for (int i = 2; i <= 100; i += 2) {
            publishProgress(i);
            try {
                Thread.sleep(sleepPeriod);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

smsReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
              progressdialog = false;
   }
}

我的怀疑是什么

  • 我认为在5分钟前收到短信时使用progressDialogFlag来拒绝progressDialog是造成问题的原因。
  • 在用户界面和工作线程中使用变量progressDialogFlag会导致某种种族状况。

谢谢你帮忙。

EN

回答 2

Stack Overflow用户

发布于 2012-06-13 12:24:17

可以在启动progressDialog时尝试如下所示

代码语言:javascript
复制
   new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
               if(null!=progressDialog && progressDialog.isShowing()){
                  // try{
                   progressDialog.dismiss();
               }

            }
        }, 5*60*1000);

但需要更多的检查.

票数 0
EN

Stack Overflow用户

发布于 2012-07-02 19:32:03

就像这样:

代码语言:javascript
复制
private ProgressDialog p;

private void sendSMS(){
     p = new ProgressDialog(Context);
     registerReceiver(broadcastReceiver, SMSINTENT);
}

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        p.dismiss();
        getActivity().unregisterReceiver(this);

    }
};

不知道这是否是最好的解决方案,但它是有效的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11014653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档