ANDROID 返回,菜单和HOME键的监听
2016-02-04 11:00
573 查看
转自:http://blog.csdn.net/ansionnal/article/details/9311577
——网上找了很多资料,项目中使用,最后将经验总结如下:
1,返回和菜单键是可以直接重写onKeyDown(int keyCode, KeyEvent event) 方法监听:
在do something 中,如果返回false则时间不继续传递,也就是不会触发相应的后续事件
2,如果是Home事件,看网上的说法,是底层拦截了这个事件,但是拦截后会发出一个广播。所以注册个广播接收HOME按键事件就行了。
在使用的时候:
在oncreate()中:
在onpause()方法中:
另外一篇:
监听android home键的实现方式 :http://blog.csdn.net/com360/article/details/6663586
——网上找了很多资料,项目中使用,最后将经验总结如下:
1,返回和菜单键是可以直接重写onKeyDown(int keyCode, KeyEvent event) 方法监听:
[code]@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 监控/拦截/屏蔽返回键 //do something } else if (keyCode == KeyEvent.KEYCODE_MENU) { //do something } else if (keyCode == KeyEvent.KEYCODE_HOME) { //这里操作是没有返回结果的 } return super.onKeyDown(keyCode, event); }
在do something 中,如果返回false则时间不继续传递,也就是不会触发相应的后续事件
2,如果是Home事件,看网上的说法,是底层拦截了这个事件,但是拦截后会发出一个广播。所以注册个广播接收HOME按键事件就行了。
[code]/** * Home键监听封装 * * */ public class HomeListener { static final String TAG = "HomeListener"; private Context mContext; private IntentFilter mFilter; private OnHomePressedListener mListener; private InnerRecevier mRecevier; // 回调接口 public interface OnHomePressedListener { public void onHomePressed(); public void onHomeLongPressed(); } public HomeListener(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.e(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(); } } } } } } }
在使用的时候:
[code]private HomeListener mHomeWatcher;
在oncreate()中:
[code]mHomeWatcher = new HomeListener(this); mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() { @Override public void onHomePressed() { if(null!=vibrator){ vibrator.cancel(); } if(null!=timer){ timer.cancel(); } } @Override public void onHomeLongPressed() { if(null!=vibrator){ vibrator.cancel(); } if(null!=timer){ timer.cancel(); } } }); mHomeWatcher.startWatch();
在onpause()方法中:
[code]mHomeWatcher.stopWatch();
另外一篇:
监听android home键的实现方式 :http://blog.csdn.net/com360/article/details/6663586
相关文章推荐
- Android 之LocalBroadcastManager
- Android NestedScrolling 实战
- Android样式的开发:selector篇
- Android 自定义命名空间
- 编译Android4.3内核源代码
- Android开发的那些坑和小技巧
- Android布局之相对布局——RelativeLayout
- 关于MpAndroidChart的折线图问题
- Android 第八天 (上午)
- Android子线程向主线程发送消息实现
- Android 编译使用高版本的Java
- Android WebView 因重定向无法正常goBack()解决方案
- Android垃圾回收机制解决内存泄露问题
- Android Studio 遇到 maximum Java heap size to 1024 MB
- Android WebView的Js对象注入漏洞解决方案
- android 自定义控件
- Android 实用代码片段
- 一次痛苦的Android应用死锁问题
- Android 左滑 返回上一个activity(销毁当前activity)
- Android简单获取多个复选框的值