Android 5.0 Intercept HomeKey
2016-04-13 21:39
459 查看
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层只能用第四种方式监听广播。
二、封装监听广播接口
三、Activity使用实例
一、拦截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; } } } } } } }
三、Activity使用实例
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(); } }
相关文章推荐
- Android--view自定义--彩虹桥<跑马灯>
- [android] 手机卫士读取联系人
- Android Fragment
- Android dos命令查看应用内存占用情况
- Android移动应用开发中常见的经验技巧总结
- Android多线程断点续传下载
- Ubuntu14.04编译Android FFmpeg详细教程
- android--View自定义基础
- Socket原理的简单理解
- Android-view自定义-Canvas
- 【ANDROID游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)
- 在Android Studio中导入github上的项目
- android socket基于mina框架实现和服务器长连接
- 用SurfaceView实现Android游戏摇杆
- Android自定义View的一些理解
- 个人加快android studio编译速度(不改),加个ssd就不用看了- -
- Android的Bitmap的一些知识点
- Android用Gson解析复杂Json
- android 非activity如何得到布局文件(layout)
- Android实现横屏以及全屏的小技巧