Android 解決監(jiān)聽(tīng)home鍵的幾種方法
Android 解決監(jiān)聽(tīng)home鍵的幾種方法
前言:
以下兩種方法可以完美解決監(jiān)聽(tīng)back鍵,home鍵,多任務(wù)鍵(最近任務(wù)鍵)。
一、使用注冊(cè)廣播監(jiān)聽(tīng)home鍵、多任務(wù)鍵
演示圖

創(chuàng)建一個(gè)廣播代碼如下:
class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
Toast.makeText(MainActivity.this, "Home鍵被監(jiān)聽(tīng)", Toast.LENGTH_SHORT).show();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
Toast.makeText(MainActivity.this, "多任務(wù)鍵被監(jiān)聽(tīng)", Toast.LENGTH_SHORT).show();
}
}
}
}
}
在Activity中的onCreate()方法中注冊(cè)廣播,代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//創(chuàng)建廣播
InnerRecevier innerReceiver = new InnerRecevier();
//動(dòng)態(tài)注冊(cè)廣播
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
//啟動(dòng)廣播
registerReceiver(innerReceiver, intentFilter);
}
這樣的話(huà),就ok了。這種方式能對(duì)home鍵與多任務(wù)鍵實(shí)現(xiàn)全盤(pán)監(jiān)聽(tīng),但你無(wú)法去屏蔽系統(tǒng)的行為。
二、重寫(xiě)onKeyDown()監(jiān)聽(tīng)、屏蔽back鍵、home鍵
在Activity中重寫(xiě)onKeyDown(),代碼如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(MainActivity.this, "返回鍵無(wú)效", Toast.LENGTH_SHORT).show();
return true;//return true;攔截事件傳遞,從而屏蔽back鍵。
}
if (KeyEvent.KEYCODE_HOME == keyCode) {
Toast.makeText(getApplicationContext(), "HOME 鍵已被禁用...", Toast.LENGTH_SHORT).show();
return true;//同理
}
return super.onKeyDown(keyCode, event);
}
在Activity中onCreate()中添加代碼,代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在setContentView之前添加,未添加的話(huà)home鍵監(jiān)聽(tīng)無(wú)效,設(shè)置窗體屬性
this.getWindow().setFlags(0x80000000, 0x80000000);
setContentView(R.layout.activity_main);
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Android下拉刷新控件PullToRefresh實(shí)例解析
這篇文章主要為大家詳細(xì)解析了Android下拉刷新控件PullToRefresh實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對(duì)焦的方法示例
這篇文章主要介紹了Android自定義相機(jī)Camera實(shí)現(xiàn)手動(dòng)對(duì)焦的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Android中Webview打開(kāi)網(wǎng)頁(yè)的同時(shí)發(fā)送HTTP頭信息方法
這篇文章主要介紹了Android中Webview打開(kāi)網(wǎng)頁(yè)的同時(shí)發(fā)送HTTP頭信息方法,本文是講解的是一種通過(guò)修改Referer來(lái)控制盜鏈的方法,需要的朋友可以參考下2015-01-01
Android如何實(shí)現(xiàn)動(dòng)態(tài)滾動(dòng)波形圖(心電圖)功能
這篇文章主要介紹了Android如何實(shí)現(xiàn)動(dòng)態(tài)滾動(dòng)波形圖(心電圖)功能,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03
Android開(kāi)發(fā)中比較耗時(shí)的一些操作小結(jié)
這篇文章主要介紹了Android開(kāi)發(fā)中比較耗時(shí)的一些操作小結(jié),本文根據(jù)實(shí)際開(kāi)發(fā)經(jīng)驗(yàn)總結(jié)了6條比較耗時(shí)的編程操作,請(qǐng)大家注意下,需要的朋友可以參考下2015-06-06
Kotlin實(shí)用語(yǔ)法糖空安全類(lèi)型轉(zhuǎn)換及相等性判斷
這篇文章主要為大家介紹了Kotlin實(shí)用語(yǔ)法糖空安全類(lèi)型轉(zhuǎn)換及相等性判斷示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Android微信自動(dòng)搶紅包插件優(yōu)化和實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android微信自動(dòng)搶紅包插件優(yōu)化和實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12

