亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android Home鍵監(jiān)聽的實現(xiàn)代碼

 更新時間:2018年12月23日 09:26:04   作者:Mr_MaChao  
這篇文章主要介紹了Android Home 鍵監(jiān)聽的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

注冊廣播:

HomeListener.getInstance().start(this);

移除廣播

HomeListener.getInstance().stop(this);

設置監(jiān)聽回調(diào)

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

添加監(jiān)聽回調(diào)

HomeListener.getInstance().addHomeKeyListener(HomePressListener listener)

移除監(jiān)聽回調(diào)

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

移除所有監(jiān)聽回調(diào)

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;

   }
  }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實現(xiàn)手寫線程池實例并測試詳解

    Java實現(xiàn)手寫線程池實例并測試詳解

    這篇文章主要來模擬一下線程池和工作隊列的流程,以及編寫代碼和測試類進行測試。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • 使用Mybatis如何實現(xiàn)刪除多個數(shù)據(jù)

    使用Mybatis如何實現(xiàn)刪除多個數(shù)據(jù)

    這篇文章主要介紹了使用Mybatis如何實現(xiàn)刪除多個數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • swagger配置正式環(huán)境中不可訪問的問題

    swagger配置正式環(huán)境中不可訪問的問題

    這篇文章主要介紹了swagger配置正式環(huán)境中不可訪問的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java實現(xiàn)輸出任意整數(shù)的每一位

    java實現(xiàn)輸出任意整數(shù)的每一位

    這篇文章主要介紹了java實現(xiàn)輸出任意整數(shù)的每一位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • MyBatis使用resultMap如何解決列名和屬性名不一致

    MyBatis使用resultMap如何解決列名和屬性名不一致

    這篇文章主要介紹了MyBatis使用resultMap如何解決列名和屬性名不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Mybatis-plus與Mybatis依賴沖突問題解決方法

    Mybatis-plus與Mybatis依賴沖突問題解決方法

    ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧這篇文章主要介紹了Mybatis-plus與Mybatis依賴沖突問題解決方法
    2021-04-04
  • 通過實例解析Java不可變對象原理

    通過實例解析Java不可變對象原理

    這篇文章主要介紹了通過實例解析Java不可變對象原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java類初始化執(zhí)行流程解析

    Java類初始化執(zhí)行流程解析

    這篇文章主要介紹了Java類初始化執(zhí)行流程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • Java二維數(shù)組查找功能代碼實現(xiàn)

    Java二維數(shù)組查找功能代碼實現(xiàn)

    這篇文章主要介紹了Java二維數(shù)組查找功能代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    這篇文章主要介紹了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子類,實現(xiàn)了Set接口,LinkedHashSet底層是一個LinkedHashMap,底層維護了一個數(shù)組+雙向鏈表,需要的朋友可以參考下
    2023-09-09

最新評論