国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Android Home鍵監聽的實現代碼

2024-07-14 08:43:17
字體:
來源:轉載
供稿:網友

之前的一個項目需要監聽home鍵的事件,發現用dispatchKeyEvent無法實現監聽,后來查了些資料,才知道home鍵不能用常規的按鍵事件監聽,需要使用廣播的方法。下面是我封裝的一個工具類。根據自己實際需要修改吧。

注冊廣播:

HomeListener.getInstance().start(this);

移除廣播

HomeListener.getInstance().stop(this);

設置監聽回調

HomeListener.getInstance().setHomeKeylistener(HomePressListener listener);

添加監聽回調

HomeListener.getInstance().addHomeKeyListener(HomePressListener listener)

移除監聽回調

HomeListener.getInstance().removeHomeKeyListener(HomePressListener listener);

移除所有監聽回調

HomeListener.getInstance().removeAllHomeKeyListener();

銷毀

HomeListener.getInstance().destroy();

工具類代碼:

import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicBoolean;public class HomeListener { public static HomeKeyListener getInstance() {  HomeKeyListener listener = HomeKeyListener.sListener;  listener.init();  return listener; } static class HomeKeyListener {  private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";//home鍵旁邊的最近程序列表鍵  private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";//按下home鍵  private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";//某些三星手機的程序列表鍵  private static AtomicBoolean isDestroy = new AtomicBoolean(true);  private static AtomicBoolean isRegister = new AtomicBoolean(false);  private static HomeKeyListener sListener = new HomeKeyListener();  private List<HomePressListener> mPressListeners = new ArrayList<HomePressListener>();  private HomeReceiver mReceiver;  private IntentFilter mHomeFileter;  private HomePressListener mHomePressListener;  public void init() {   if (isDestroy.get()) {    this.mPressListeners = new ArrayList<HomePressListener>();    this.mReceiver = new HomeReceiver();    this.mHomeFileter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);    isDestroy.set(false);   }  }  public synchronized void start(Context context) {   if (!isRegister.get()) {    context.registerReceiver(mReceiver, mHomeFileter);    isRegister.set(true);   }  }  public synchronized void stop(Context context) {   if (isRegister.get()) {    context.unregisterReceiver(mReceiver);    isRegister.set(false);   }  }  public void setHomeKeylistener(HomePressListener listener) {   this.mHomePressListener = listener;  }  public void addHomeKeyListener(HomePressListener listener) {   mPressListeners.add(listener);  }  public void removeHomeKeyListener(HomePressListener listener) {   mPressListeners.add(listener);  }  public void removeAllHomeKeyListener() {   mPressListeners.clear();  }  public void destroy() {   this.mPressListeners.clear();   this.mPressListeners = null;   this.mReceiver = null;   this.mHomeFileter = null;   this.mHomePressListener = null;   isDestroy.set(true);  }  public interface HomePressListener {   void onHomePress();   void onHomeRecentAppsPress();  }  class HomeReceiver extends BroadcastReceiver {   @Override   public void onReceive(Context context, Intent intent) {    receive(intent);   }  }  private void receive(Intent intent) {   String action = intent.getAction();   if (action != null && action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {    String reason = intent.getStringExtra( "reason" );    dispatchPress(reason);   }  }  private void dispatchPress(String reason) {   switch (reason) {    case SYSTEM_DIALOG_REASON_HOME_KEY:     if (mHomePressListener != null) mHomePressListener.onHomePress();     for (HomePressListener listener : mPressListeners) listener.onHomePress();     break;    case SYSTEM_DIALOG_REASON_RECENT_APPS:    case SYSTEM_DIALOG_REASON_ASSIST:     if (mHomePressListener != null) mHomePressListener.onHomeRecentAppsPress();     for (HomePressListener listener : mPressListeners) listener.onHomeRecentAppsPress();     break;   }  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲靖市| 岳阳市| 灵武市| 浦城县| 长寿区| 金沙县| 奉新县| 察隅县| 涡阳县| 清丰县| 招远市| 马山县| 江津市| 武冈市| 广安市| 宁强县| 垫江县| 浙江省| 承德市| 红桥区| 赫章县| 启东市| 雷波县| 台州市| 镇原县| 荥经县| 大同县| 象州县| 宁晋县| 昌图县| 靖西县| 图们市| 泽州县| 得荣县| 霍城县| 石林| 东山县| 武乡县| 青州市| 镇雄县| 布尔津县|