【问题标题】:Disable home button when progress dialog is running进度对话框运行时禁用主页按钮
【发布时间】:2019-03-24 19:18:35
【问题描述】:

我正在制作一个应用程序,其中在某些任务在后台运行时显示进度对话框。我想在后台任务启动并显示进度对话框时禁用硬件主页按钮,并在任务完成和进度对话框完成时再次启用它,这样该任务就不会被中断。我试过使用 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]);

        }
}

【问题讨论】:

  • @zombie 我已经提到我已经看到了那个答案,但这并没有帮助,很久以前就有人问过

标签: android android-layout


【解决方案1】:

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

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

【讨论】:

  • 它不仅仅是下载任务。我已经编辑了问题并添加了代码来解释我到底想要什么。请看。
  • 这似乎仍然可以回答您的问题。您想禁用主页按钮,但出于显而易见的原因,您不能这样做。
  • 在活动暂停状态对话框将不可见,但我不希望它保持可见。有没有其他的想法可以做到这一点。
【解决方案2】:

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

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

【讨论】:

  • 我想禁用主页按钮我已经禁用了返回按钮。
  • 也许您可以尝试覆盖活动生命周期事件之一中的行为,例如onPause(),以便在下载过程中不离开当前活动。为什么您需要阻止用户离开当前视图?为什么不使用DownloadManager
  • 实际上我没有下载任何我用过的东西让我的问题变得清晰。
【解决方案3】:

试试这个,dialog 是 ProgressDialog 的一个对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    相关资源
    最近更新 更多