2016-10-13 54 views
-1

我正在製作一個應用程序,其中某個任務在後臺運行時顯示進度對話框。我想在後臺任務啓動並顯示進度對話框時禁用硬件主頁按鈕,並在任務完成並且進度對話框完成時再次啓用它,以便此任務不會中斷。我試過使用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

@ zombie我已經提到,我已經看到了答案,但這並沒有幫助,它被問了很久回 –

回答

0

您可以禁用硬件後退按鈕由帶有某種邏輯,你的活動覆蓋onBackPressed()確定後面的動作是否應該進行。我不確定是否可以覆蓋硬件主頁按鈕。

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

我想禁用主頁按鈕我已經禁用了後退按鈕。 –

+0

也許您可以嘗試覆蓋其中一個活動生命週期事件(如onPause())中的行爲,以在下載發生時不離開當前活動。爲什麼你需要防止用戶離開當前視圖?爲什麼不使用[DownloadManager](https://developer.android.com/reference/android/app/DownloadManager.html)? –

+0

實際上我並沒有下載任何我已經使用的工作,使我的問題清楚。 –

3

應用程序不允許禁用HOME按鈕。然後,您應該在後臺服務中下載(或任何其他冗長的操作或進程),並在運行時讓UI連接到它。

如果用戶按下HOME,您的活動暫停,但下載繼續,當用戶導航回您的活動時,您將更新進度。

+0

它不只是下載任務。我編輯了這個問題並添加了代碼來解釋我想要的內容。請看看它。 –

+0

這似乎仍然回答你的問題。你想禁用主頁按鈕,但你不能這麼做,原因很明顯。 –

+0

在活動暫停狀態下,對話框將不可見,但我不希望它仍然可見。有沒有不同的想法來做到這一點。 –