Android监听Home键的完美解决方案

相信有不少朋友在开发过程中需要监听HOME键的需求,现本人将代码奉上,希望对大家有所帮助!

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

public class HomeWatcher

{

private static final String TAG = "HomeWatcher";

private Context mContext;

private IntentFilter mFilter;

private OnHomePressedListener mListener;

private InnerRecevier mRecevier;

// 回调接口

public interface OnHomePressedListener

{

public void onHomePressed();

public void onHomeLongPressed();

}

public HomeWatcher(Context context)

{

mContext = context;

mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

}

/**

* 设置监听

*

* @param listener

*/

public void setOnHomePressedListener(OnHomePressedListener listener)

{

mListener = listener;

mRecevier = new InnerRecevier();

}

/**

* 开始监听,注册广播

*/

public void startWatch()

{

if (mRecevier != null)

{

mContext.registerReceiver(mRecevier, mFilter);

}

}

/**

* 停止监听,注销广播

*/

public void stopWatch()

{

if (mRecevier != null)

{

mContext.unregisterReceiver(mRecevier);

}

}

/**

* 广播接收者

*/

class InnerRecevier extends BroadcastReceiver

{

final String SYSTEM_DIALOG_REASON_KEY = "reason";

final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";

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 (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS))

{

String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);

if (reason != null)

{

Log.i(TAG, "action:" + action + ",reason:" + reason);

if (mListener != null)

{

if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY))

{

// 短按home键

mListener.onHomePressed();

}

else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS))

{

// 长按home键

mListener.onHomeLongPressed();

}

}

}

}

}

}

}

调用时注意:

在初始化调用(如onCreate)时添加如下代码:

HomeWatcher mHomeWatcher = new HomeWatcher(this);

mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener()

{

@Override

public void onHomePressed()

{

//按了HOME键

}

@Override

public void onHomeLongPressed()

{

//长按HOME键

}

});

mHomeWatcher.startWatch();

在程序销毁时(如:onDestroy)时添加如下代码:

if(mHomeWatcher != null)

mHomeWatcher.stopWatch();// 在销毁时停止监听,不然会报错的。

时间: 2024-12-05 03:11:38

Android监听Home键的完美解决方案的相关文章

Android监听HOME键的最简单的方法

public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);//关键代码 setContentView(R.la

android 监听返回键

android监听返回键 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { return true; } return super.onKeyDown(keyCode, event); } event.getRepeatCount() == 0重复次数:1次

Android监听返回键、Home键+再按一次返回键退出应用

Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME [java] view plain copy @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //++自定义点击事件 return tru

Android 监听Home键

游戏需要统计用户退出游戏是按的返回键还是home,因为返回键是自己cocos2dx做的监听,所以这里说一下android Activity里监听Home键方法,亲测可用,这里做个备份其中也是参考别人的代码实现的,路径没有记住,如有雷同,望见谅-- 这里使用的是广播的形式监听Home操作的方法: 首先在MainActivity里添加如下广播,生成一个成员变量:  private final BroadcastReceiver homeReceiver = new BroadcastReceiver

Android 监听返回键退出程序的两种实现

1.Android 双击返回键退出程序 思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定时器是每次用户按下返回键才去创建. 代码如下: /** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyC

Android监听home键

/** * * 监听Home键 */ private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() { String SYSTEM_REASON = "reason"; String SYSTEM_HOME_KEY = "homekey"; String SYSTEM_HOME_KEY_LONG = "recentapps"; @Override public

Android监听返回键

android开发中,对返回键事件的监听是要经常用到的,下面以一个例子来演示一下android对返回键的事件监听. public class BackKeyTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

Xamarin Android 监听音量键(下)

上篇在 MainActivity 中重写了按键事件(OnKeyDown),获取了音量键键值并打印了出来,当然,手机物理按键和虚拟按键(音量键.返回键.菜单键等)均可通过该按键事件被捕获. 但是,按键重写在 MainActivity 中,音量键按下时执行的方法在其他页面中. 作者冒出了一个不成熟的想法:利用(publish-subscribe)模式,在 MainActivity 中定义发布者(publish),实例化后层层传递到达 我的页面中,,再将实例化后的订阅者(subscribe)连接上.如

vs xamarin android 监听返回键退出程序

public override bool OnKeyDown([GeneratedEnum]Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back) { Finish(); System.Environment.Exit(0); } return base.OnKeyDown(keyCode, e); } 在activity中重写OnKeyDown监听.