公司项目用到监听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键处理逻辑,所以将监听放在了BaseActivity中。
public class BaseActivity extends AppCompatActivity 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 onDestroy() { super.onDestroy(); mHomeWatcher.stopWatch(); } @Override public void onHomePressed() { // TODO 点击HOME键时 要做的事情 } @Override public void onHomeLongPressed() { // TODO 长按HOME键时 要做的事情 } }到此处,整个逻辑都结束了。最近在googleplay上发布了自己的小应用callblocker,欢迎大家下载指正。 附上googleplay的地址:CallBlocker https://play.google.com/store/apps/details?id=com.imobi.callblocker&hl=zh-CN