android 按键消息,Android监听Home按键消息
Android對屏幕下方常用的四個(gè)按鍵消息處理是不一致的:
搜索按鍵的消息在onKeyDown或者onKeyUp中接收;
菜單按鍵的消息在onCreateOptionsMenu、onKeyDown或onKeyUp方法中接收;
返回按鍵的消息可以在onBackPressed、onKeyDown或onKeyUp方法中接收。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch( keyCode ){
case KeyEvent.KEYCODE_BACK:{
}
break;
case KeyEvent.KEYCODE_MENU:{
}
break;
case KeyEvent.KEYCODE_SEARCH:{
}
break;
default:{
}
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch( keyCode ){
case KeyEvent.KEYCODE_BACK:{
}
break;
case KeyEvent.KEYCODE_MENU:{
}
break;
case KeyEvent.KEYCODE_SEARCH:{
}
break;
default:{
}
break;
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
對于Home按鍵消息的處理,既不能通過onKeyDown、onKeyUp接收到,android也沒有提供專有的方法接收按鍵消息,個(gè)人估計(jì)home按鍵算是一個(gè)app異常信息處理的后門,比如ANR后,按其它按鈕沒有比按Home按鍵好使,所以android為了能夠提供更好的用戶體驗(yàn),沒有提供供用戶監(jiān)聽home按鍵消息的方法。
注:網(wǎng)上提供了各種各樣監(jiān)聽Home按鍵消息的方法,但只有這個(gè)比較好使。
但辦法總是有的,在每次點(diǎn)擊Home按鍵時(shí)都會發(fā)出一個(gè)action為Intent.ACTION_CLOSE_SYSTEM_DIALOGS的廣播,它是關(guān)閉系統(tǒng)Dialog的廣播,我們可以通過注冊它來監(jiān)聽Home按鍵消息,我自定義了一個(gè)home按鍵監(jiān)聽工具類,代碼如下,使用說明參見類名上方的使用說明:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
/**
* Home按鍵監(jiān)聽類
* 使用說明:
* 1、初始化HomeListen
* HomeListen homeListen = new HomeListen( this );
* homeListen.setOnHomeBtnPressListener( new setOnHomeBtnPressListener(){
* @Override
* public void onHomeBtnPress( ){
* // 按下Home按鍵回調(diào)
* }
*
* @Override
* public void onHomeBtnLongPress( ){
* // 長按Home按鍵回調(diào)
* }
* });
*
* 2、在onResume方法中啟動(dòng)HomeListen廣播:
* homeListen.start();
*
* 3、在onPause方法中停止HomeListen廣播:
* homeListen.stop( );
* */
public class HomeListen {
public HomeListen(Context context) {
mContext = context;
mHomeBtnReceiver = new HomeBtnReceiver( );
mHomeBtnIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
public void setOnHomeBtnPressListener( OnHomeBtnPressLitener onHomeBtnPressListener ){
mOnHomeBtnPressListener = onHomeBtnPressListener;
}
public void start( ){
mContext.registerReceiver( mHomeBtnReceiver, mHomeBtnIntentFilter );
}
public void stop( ){
mContext.unregisterReceiver( mHomeBtnReceiver );
}
class HomeBtnReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
receive( context, intent );
}
}
private void receive(Context context, Intent intent){
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra( "reason" );
if (reason != null) {
if( null != mOnHomeBtnPressListener ){
if( reason.equals( "homekey" ) ){
// 按Home按鍵
mOnHomeBtnPressListener.onHomeBtnPress( );
}else if( reason.equals( "recentapps" ) ){
// 長按Home按鍵
mOnHomeBtnPressListener.onHomeBtnLongPress( );
}
}
}
}
}
public interface OnHomeBtnPressLitener{
public void onHomeBtnPress( );
public void onHomeBtnLongPress( );
}
private Context mContext = null;
private IntentFilter mHomeBtnIntentFilter = null;
private OnHomeBtnPressLitener mOnHomeBtnPressListener = null;
private HomeBtnReceiver mHomeBtnReceiver = null;
}
在Activity中做如下調(diào)用即可:
public class HomeListenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_listen_layout);
initHomeListen( );
}
@Override
protected void onResume( ) {
super.onResume();
mHomeListen.start( );
}
@Override
protected void onPause() {
super.onPause();
mHomeListen.stop( );
}
private void initHomeListen( ){
mHomeListen = new HomeListen( this );
mHomeListen.setOnHomeBtnPressListener( new OnHomeBtnPressLitener( ) {
@Override
public void onHomeBtnPress() {
showToast( "按下Home按鍵!" );
}
@Override
public void onHomeBtnLongPress() {
showToast( "長按Home按鍵!" );
}
});
}
private void showToast( String toastInfoStr ){
Toast.makeText( this, toastInfoStr, Toast.LENGTH_LONG ).show( );
}
private HomeListen mHomeListen = null;
}
總結(jié)
以上是生活随笔為你收集整理的android 按键消息,Android监听Home按键消息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android分钟倒计时,Android
- 下一篇: 鸿蒙系统没有优势了吗,“鸿蒙系统”超震撼