Android 广播监听HOME键事件(只监听,非拦截)
有时候我们写的APP要在按下HOME键返回桌面前做一些保存数据等操作,这样就要涉及到HOME事件的监听,下面是用广播监听HOME事件的代码和代码的使用方法。(PS:这段类代码是我从一个叫做 推聊 的APP源代码里面挖出来的~ 我这里是写它的使用方法,不算抄袭吧?!)
HomeWatcher.java 类:封装了HOME点击事件的广播接收者、注册广播接收者方法以及设置了两个回调接口方法。
/** * Home键监听封装 */ public class HomeWatcher { 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; mRecevier = new InnerRecevier(); mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } /** * 设置监听 * @param listener */ public void setOnHomePressedListener(OnHomePressedListener listener) { mListener = listener; } /** * 开始监听,注册广播 */ 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) { L.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(); } } } } } } }
好,下面就是这个类在你要监听HOME事件的Activity中的使用方法:
public class MyActivity extends Activity implements OnHomePressedListener{ private HomeWatcher mHomeWatcher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); mHomeWatcher = new HomeWatcher(this); mHomeWatcher.setOnHomePressedListener(this); mHomeWatcher.startWatch(); } @Override protected void onPause() { super.onPause(); mHomeWatcher.setOnHomePressedListener(null); mHomeWatcher.stopWatch(); } @Override public void onHomePressed() { // TODO 点击HOME键时 要做的事情 } @Override public void onHomeLongPressed() { // TODO 长按HOME键时 要做的事情 } }上面的onPause可以根据需要写在onDestroy里面。
注释不多,但是只要有点基础的应该都很容易能看懂哈!
好了,祝大家新年快乐!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。