运行进度对话框时禁用主页按钮

时间:2016-10-13 20:10:58

标签: android android-layout

我正在创建一个应用程序,其中我正在显示进度对话框,而某些任务正在后台运行。我想在后台任务启动并显示进度对话框时禁用硬件主页按钮,并在任务完成并且进度对话框完成后再次启用它,以便不会中断此任务。我尝试过使用 startLockTask()和stopLockTask();但它总是要求许可,并且它不适用于低于21的api。 我试过以下答案,但没有帮助。

How to disable Home and other system buttons in Android?

https://stackoverflow.com/a/23349558/2579281

据我所知,这个问题已经被问过很久了。如果有人有新方法,请帮助

class MyTaskRunner extends AsyncTask<String, String, String> {

        private String resp;
        ProgressDialog progressDialog;

        @Override
        protected String doInBackground(String... params) {
            publishProgress("Sleeping..."); // Calls onProgressUpdate()
            try {
                int time = Integer.parseInt(params[0])*1000;

                Thread.sleep(time);
                resp = "Slept for " + params[0] + " seconds";
            } catch (InterruptedException e) {
                e.printStackTrace();
                resp = e.getMessage();
            } catch (Exception e) {
                e.printStackTrace();
                resp = e.getMessage();
            }
            return resp;
        }


        @Override
        protected void onPostExecute(String result) {
            // execution of result of Long time consuming operation
            progressDialog.dismiss();
            //enable home button here
            //stopLockTask();

        }


        @Override
        protected void onPreExecute() {
            progressDialog = ProgressDialog.show(MainActivity.this,
                    "ProgressDialog","Wait..");
                    //disable home button here
                    //startLockTask();
        }


        @Override
        protected void onProgressUpdate(String... text) {
            finalResult.setText(text[0]);

        }
}

3 个答案:

答案 0 :(得分:3)

不允许应用停用HOME按钮。然后,您应该在后台服务中进行下载(或任何其他冗长的操作或过程),并在运行时让UI连接到它。

如果用户按下HOME,则暂停活动但继续下载,当用户导航回您的活动时,您将更新进度。

答案 1 :(得分:0)

您可以通过某种逻辑覆盖活动中的onBackPressed()来禁用硬件后退按钮,以确定是否应执行后退操作。我不确定是否可以覆盖硬件主页按钮。

@Override
public void onBackPressed() {
    if (allowBack) {
        super.onBackPressed();
    }
}

答案 2 :(得分:0)

尝试一下,对话框是ProgressDialog的对象。

    dialog.setCancelable(false);
    Window window = dialog.getWindow();
    WindowManager.LayoutParams wlp = dialog.getWindow().getAttributes();
    wlp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    window.setAttributes(wlp);