Android 5.0 Intercept HomeKey
来源:互联网 发布:it教育培训机构 编辑:程序博客网 时间:2024/06/15 16:56
Android 5.0 Intercept HomeKey
一、拦截Home键的多种方式介绍
1.1 重写onAttachedToWindow、onKeyDown
1.2 重写onSaveInstanceState
1.3 重写onUserLeaveHint
1.4 监听广播Intent.ACTION_CLOSE_SYSTEM_DIALOGS
Android 4.4 之前版本,前三种方式都是可以拦截到的,第四种未确认。4.4之后的系统前三种已经失效,因为在系统Frameworks层已经做了拦截,Application层只能用第四种方式监听广播。
二、封装监听广播接口
public class KeypadIntercept { private static final String TAG = "KeypadIntercept"; private Context mContext; private IntentFilter mFilter; private OnKeypadListener mListener; private HomeKeyRecevier mRecevier; // 广播携带String类型参数 final String SYSTEM_DIALOG_REASON_KEY = "reason"; // 切换应用程序键 final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"; // Home键 final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; // 申明按键事件监听接口 public interface OnKeypadListener { void onHomeKeypadPressed(); void onRecentKeypadPressed(); void onKeypadError(); } public KeypadIntercept(Context context) { mContext = context; mRecevier = new HomeKeyRecevier(); // 实例化的时候给Intent添加广播 mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } public void setOnKeypadListener(OnKeypadListener listener) { mListener = listener; } public void startListener() { if (mRecevier != null) { // 动态注册广播 mContext.registerReceiver(mRecevier, mFilter); } } public void stopListener() { if (mRecevier != null) { // 注销广播 mContext.unregisterReceiver(mRecevier); } } class HomeKeyRecevier extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reasonKey = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY); if (reasonKey != null) { if (mListener != null) { Log.i(TAG, "Action= " + action + ", reason= " + reasonKey); switch (reasonKey) { case SYSTEM_DIALOG_REASON_HOME_KEY: mListener.onHomeKeypadPressed(); break; case SYSTEM_DIALOG_REASON_RECENT_APPS: mListener.onRecentKeypadPressed(); break; default: mListener.onKeypadError(); break; } } } } } }}
public class MainActivity extends AppCompatActivity { KeypadIntercept mKeypadIntercept; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mKeypadIntercept = new KeypadIntercept(MainActivity.this); mKeypadIntercept.startListener(); mKeypadIntercept.setOnKeypadListener(new KeypadIntercept.OnKeypadListener() { @Override public void onHomeKeypadPressed() { Toast.makeText(MainActivity.this, "onHomeKeypadPressed", Toast.LENGTH_LONG).show(); } @Override public void onRecentKeypadPressed() { Toast.makeText(MainActivity.this, "onRecentKeypadPressed", Toast.LENGTH_LONG).show(); } @Override public void onKeypadError() { Toast.makeText(MainActivity.this, "onKeypadError", Toast.LENGTH_LONG).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); mKeypadIntercept.stopListener(); }}
0 0
- Android 5.0 Intercept HomeKey
- Android SMS intercept without notification icon or WAP-PUSH messages
- intercept 1.0
- camel Intercept
- tcp intercept
- mybatis intercept
- Android关于Touch事件的dispatch、intercept以及onTouchEvent执行的理解
- struts2 Intercept 实现原理
- struts2 Intercept 实现原理
- ip tcp intercept
- third-order intercept understander
- Spring Security intercept url
- Listener,Filter ,Intercept
- intercept-url配置
- flume之intercept
- 转载 org/aopalliance/intercept/MethodInterceptor
- 异常org.aopalliance.intercept.MethodInterceptor
- java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
- 在兔窝儿的第27个工作日:ThinkPHP分页查询。
- 数据结构---二叉树
- 【c语言】输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如:1990->1 9 9 0
- c语言const关键字解析
- 第三次C++作业
- Android 5.0 Intercept HomeKey
- springmvc 使用InternalResourceViewResolver解析URL文件
- 【c语言】用选择法对10个整数排序
- java中的序列化与反序列化
- arm学习之环境的配置
- 软件设计模式——简单工厂模式(Simple Factory)
- Eclipse中设置VM参数
- serv-U cuteftp FTP中文件名乱码问题
- Kth Smallest Element in a BST