我正在创建一个应用程序,其中我正在显示进度对话框,而某些任务正在后台运行。我想在后台任务启动并显示进度对话框时禁用硬件主页按钮,并在任务完成并且进度对话框完成后再次启用它,以便不会中断此任务。我尝试过使用 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]);
}
}
答案 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);