2012-04-27 81 views
4

我知道這個問題已被問了很多次,答案總是「不,我們不能禁用主頁按鈕」。不能禁用特定的Android設備上的主頁按鈕

我有一個不同的查詢要求。

我寫了簡單的代碼,其中我的活動覆蓋了onKeyDown()並對所有按鍵返回true。

從理論上講,這意味着打開應用程序的任何人都卡在那裏,並且沒有選擇移出應用程序。

當我測試在不同的設備本申請中,我提出以下觀察:

  1. 摩托羅拉設備與OS爲2,2,2,主頁按鈕得到禁用。
  2. 在操作系統爲2.3.5的HTC設備上,Home按鈕被禁用。
  3. 在操作系統爲2.3.7的Sony上,Home按鈕被禁用。
  4. 在OS爲2.2.1和2.3.3的Samsung上,Home按鈕被禁用。
  5. 在OS爲2.3.6和4.0.4的Samsung上,主頁按鈕保持啓用狀態。

這些意見似乎很矛盾的。

有沒有人有任何想法,爲什麼不同的設備行爲不同,什麼是處理這種情況的最佳方法。

根據我的理解,直到現在沒有任何廠商定製Android操作系統。每個人都在其上放置UI層,但沒有人觸及內部。

回答

0

正如我的問題本身提到的低於2.3.6的操作系統覆蓋keypress()功能工作良好。

問題從2.3.6開始。我不知道這些設備供應商做了什麼,但keypress()功能在所有設備上的功能不同。

也從ICS開始,谷歌已經停止使用keypress()函數一次。

那麼我們該怎麼做。

我看到它的方式,如果我們試圖重載主頁按鈕然後它不可能,但我們肯定可以聽到它。

在我們的Android清單中,我們使用<category android:name="android.intent.category.HOME" />過濾器,這使得我們的活動成爲家庭替代屏幕。 現在,當您按Home按鈕時,內容解析器彈出窗口會一直出現,並詢問哪個應用程序即默認啓動器或您的應用程序應對主頁按鈕單擊作出響應。你隨時可以選擇你的應用程序。

但是這不會覆蓋或禁用主頁按鈕。每當你按下主頁按鈕時,同樣的事情會一再重複,直到你讓應用程序默認爲止,通過點擊內容解析器彈出的默認使用複選框。

現在,一旦你選擇你的應用程序作爲默認主頁,新聞將始終啓動你的應用程序。

完成...沒有。知道的問題是,如果您移出應用程序,主頁按鈕仍會啓動您的應用程序。一旦你的工作完成,如何擺脫它。

我們必須做的,同時關閉或致電我們的活動結束()是,在它之前,我們應該設置包的設置使用默認:

paramPackageManager1.setComponentEnabledSetting(localComponentName2, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 1);

這將取消該家庭關聯按鈕從您的活動。

+2

我認爲,「禁用主頁按鈕」的一部分將阻止「完成操作使用」對話框。如果用戶將在對話框中選擇默認的Android啓動器,您將無法再處理主頁按鈕。 – MikeL 2013-06-05 14:53:28

7

我知道這個問題已被問了很多次,答案總是「不,我們不能禁用主頁按鈕」。

如果要處理HOME按鈕,請實施主屏幕。

沒有任何一個有任何想法,爲什麼不同的設備表現不同

因爲它們是不同的設備和供應商所做的更改。另外,對於4.0.4,可能已經添加了額外的保護措施,以幫助防止惡意軟件作者在主屏幕上劫持HOME按鈕。

什麼是處理這種情況

如果你要處理的HOME按鈕,實現一主屏幕的最佳途徑。

每個人都在其上放置UI層,但沒有人觸及內部。

這是不正確。幾乎設備供應商已經「觸及內部」,在不同程度上。只要他們滿足Play商店的the compatibility requirements,他們的更改就被Google視爲可接受。

+0

喜@CommonsWare,我的一切,其中U紛紛表示同意。但如果是這樣的話,爲什麼像Toddler鎖那樣的某些應用程序能夠禁用主屏幕按鈕,而無需將其應用程序轉換爲主屏幕應用程序?我也可以通過實現主屏幕來禁用主頁按鈕,但提示選擇應用程序來完成操作會導致問題。如果我選擇我的應用程序,那麼它的確定,但如果我選擇任何其他應用程序比主頁按鈕開始工作在我的應用程序。幼兒鎖有某種方式可以繞過此功能... – dexprab 2012-04-30 04:48:36

+0

@dexprab:幼兒鎖是一個主屏幕,最後我檢查。如果它具有您描述的功能,那麼需要關閉Toddler Lock利用的安全漏洞。 – CommonsWare 2012-04-30 10:30:10

+0

我不認爲有任何安全漏洞,因爲該應用程序有一個基於高效模式的註銷機制。也被列爲許多網站上最好的應用程序之一。我想谷歌可能已經研究過它,如果這是一個安全故障。即使這是我真的有興趣知道他們是如何做到的。我有他們的清單,但它並沒有幫助我在實現功能 – dexprab 2012-04-30 10:51:40

6

你可能想這給一個嘗試:

@Override 
public void onBackPressed() { 

} 

@Override 
protected void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    ((ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE)).moveTaskToFront(getTaskId(), 0); 

} 

權限需要 - 添加下面的體現

<uses-permission android:name="android.permission.REORDER_TASKS" /> 
+0

在棒棒糖上不適用於我。 – Tomask 2016-02-19 14:29:00

+0

作爲一個啓動器應用程序後,它將被添加正確的答案。無論用戶什麼時候離開,都可以通過返回到活動來禁用後退按鈕,任務管理器按鈕和通知欄交互 – hannunehg 2016-02-21 12:54:35