安卓Home键封装监听

react-native 对android物理返回键back的监听以及基类封装 这个需求主要是为了解决android端物理返回键的监听的。 我们使用BackAndroid组件来完成对android物理返回键的监听。 我们可以在Home组件中注册,一旦APP进入Home页面,就接管物理返回键的监听,我们只在Home组件渲染完成后来监听,在Home组件被卸载后移除对返回键的监听,在onBackAndroid中,我们先检查navigator的堆栈,如果堆栈中有组件存在,则pop... 阅读详情
众所周知,我们监听返回键事件,无法是下面两个方法:
[java]  view plain copy
  1. @Override  
  2.     public void onBackPressed() {  
  3.         //do something  
  4.         //super.onBackPressed();  
  5.     }  
  6.       
  7.     @Override  
  8.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  9.         if(keyCode == KeyEvent.KEYCODE_BACK){  
  10.             //do something  
  11.         }  
  12.         return super.onKeyDown(keyCode, event);  
  13.     }  


于是乎,我们理所当然的想到,监听Home键的方法是:if(keyCode == KeyEvent.KEYCODE_HOME)。但实际上,这样是行不通的,因为此时home键的消息在framework层就已经被拦截,所以,我们在应用中通过此方法是无法监听到Home键的消息的。那么我们如何捕获Home键事件,并作出相应处理呢?其实系统还是给我们发出广播的,下面,就跟大家分享一下,封装好了的监听Home键的方法:

HomeWatcher类:

[java]  view plain copy
  1. /** 
  2.  * Home键监听封装 
  3.  *  
  4.  * @author way 
  5.  *  
  6.  */  
  7. public class HomeWatcher {  
  8.   
  9.     static final String TAG = "HomeWatcher";  
  10.     private Context mContext;  
  11.     private IntentFilter mFilter;  
  12.     private OnHomePressedListener mListener;  
  13.     private InnerRecevier mRecevier;  
  14.   
  15.     // 回调接口  
  16.     public interface OnHomePressedListener {  
  17.         public void onHomePressed();  
  18.   
  19.         public void onHomeLongPressed();  
  20.     }  
  21.   
  22.     public HomeWatcher(Context context) {  
  23.         mContext = context;  
  24.         mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);  
  25.     }  
  26.   
  27.     /** 
  28.      * 设置监听 
  29.      *  
  30.      * @param listener 
  31.      */  
  32.     public void setOnHomePressedListener(OnHomePressedListener listener) {  
  33.         mListener = listener;  
  34.         mRecevier = new InnerRecevier();  
  35.     }  
  36.   
  37.     /** 
  38.      * 开始监听,注册广播 
  39.      */  
  40.     public void startWatch() {  
  41.         if (mRecevier != null) {  
  42.             mContext.registerReceiver(mRecevier, mFilter);  
  43.         }  
  44.     }  
  45.   
  46.     /** 
  47.      * 停止监听,注销广播 
  48.      */  
  49.     public void stopWatch() {  
  50.         if (mRecevier != null) {  
  51.             mContext.unregisterReceiver(mRecevier);  
  52.         }  
  53.     }  
  54.   
  55.     /** 
  56.      * 广播接收者 
  57.      */  
  58.     class InnerRecevier extends BroadcastReceiver {  
  59.         final String SYSTEM_DIALOG_REASON_KEY = "reason";  
  60.         final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";  
  61.         final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";  
  62.         final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";  
  63.   
  64.         @Override  
  65.         public void onReceive(Context context, Intent intent) {  
  66.             String action = intent.getAction();  
  67.             if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {  
  68.                 String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);  
  69.                 if (reason != null) {  
  70.                     Log.e(TAG, "action:" + action + ",reason:" + reason);  
  71.                     if (mListener != null) {  
  72.                         if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {  
  73.                             // 短按home键  
  74.                             mListener.onHomePressed();  
  75.                         } else if (reason  
  76.                                 .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {  
  77.                             // 长按home键  
  78.                             mListener.onHomeLongPressed();  
  79.                         }  
  80.                     }  
  81.                 }  
  82.             }  
  83.         }  
  84.     }  
  85. }  


接下来,我们需要在应用中开启监听,下面是以在Activity中的应用为例:

[java]  view plain copy
  1. /** 
  2.  * 应用HomeWatcher小例 
  3.  *  
  4.  * @author way 
  5.  *  
  6.  */  
  7. public class MainActivity extends Activity {  
  8.     private static final String TAG = "MainActivity";  
  9.     private HomeWatcher mHomeWatcher;  
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.   
  16.         mHomeWatcher = new HomeWatcher(this);  
  17.         mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {  
  18.             @Override  
  19.             public void onHomePressed() {  
  20.                 Log.e(TAG, "onHomePressed");  
  21.             }  
  22.   
  23.             @Override  
  24.             public void onHomeLongPressed() {  
  25.                 Log.e(TAG, "onHomeLongPressed");  
  26.             }  
  27.         });  
  28.         mHomeWatcher.startWatch();  
  29.     }  
  30.   
  31.     @Override  
  32.     protected void onPause() {  
  33.         super.onPause();  
  34.         mHomeWatcher.stopWatch();// 在onPause中停止监听,不然会报错的。  
  35.     }  
  36. }  
Android Studio开发基础:对点击事件和初始化控件进行封装 Android Studio开发基础:对点击事件和初始化控件进行封装在Android应用程序开发中,经常需要处理用户的点击事件,并对控件进行初始化。为了提高代码的重用性和可维护性,我们可以将点击事件和控件的初始化进行封装。本文将介绍如何使用C#语言在Android Studio中进行这样的封装。首先,我们需要创建一个新的Android项目,并打开MainActivity.cs文件。 阅读详情

相关推荐

Android中对手机的返回键,Home键以及多功能切换键的监听

Android中对手机的返回键,Home键以及多功能切换键的监听,详细了解请移步:http://blog.youkuaiyun.com/zxc514257857/article/details/77045754

Android之Home键监听封装

众所周知,我们监听返回键事件,无法是下面两个方法: [java] view plaincopy @Override       public void onBackPressed() {           //do something           //super.onBackPressed();       }           

梵依然的专栏 845

Android中监听Home键的4种方法总结

昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,说下面的方法可以。(其实不行) 代码如下: @Override     public void onAttachedToWindow() {         // TODO Auto-generated method stub         Log.d(“aeon”,”onAttachedToWindow”);         this.getW

Android监听Home键实例详解

Android监听Home键实例详解

dodod2012的专栏 2906

最优化问题——一维搜索(一)

最优化问题——一维搜索 1. 一维搜索的引入 1.1 从非线性规划问题到一维搜索 在前面的文章中,我们提到了基于迭代的非线性规划问题的求解思路。在求解过程中,我们提到了在每一步的迭代中都需要对计算步长因子,其计算公式为: λk=minλf(xk+λp)λ_k=min_{λ}f(x_k+λp)λk​=minλ​f(xk​+λp) 我们将f(xk+λp)f(x_k+λp)f(xk​+λp)视为λ的一元函数,我们的目标就是求这个一元函数的极小值。对于这个问题,我通常的求解方式为一维搜索。 1.2 一维搜索的基本形

hei653779919的博客 7360

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6147

android home键,back返回键监听,Window窗体监听返回键

在Activity中监听或拦截返回键 重写dispatchKeyEvent()方法 @Override public boolean dispatchKeyEvent(KeyEvent event) { if(event.getKeyCode()==KeyEvent.KEYCODE_BACK){ Log.d("ansen", "KEY

你只是看起很努力 4178

Diebold-Mariano检验

给定两个预测的预测结果,我们希望比较他们的预测结果,以用于预测模型精度的比较。 Diebold-Mariano检验本质是一个t检验,用于检验替代预测的两个损失序列的平均值是否相等。即,它是一系列损失差的零均值的t检验。在存在自相关的情况下,它使用损失差分时间序列标准差的自相关一致性估计。 注意,在使用DM检验式时,假设损失序列是平稳的。 另外,DM检验在小样本数据时往往会拒绝零假设。对于小样本数据,推荐Harvey, Leybourne and Newbold (HLN)检验【1】; 参考文献 【1】htt

weixin_43948357的博客 6565

Android 解决监听home键的方法

Android 解决监听home键的方法

weixin_42602900的博客 782

【DSP】【工程实战】从零构建C6678多核工程:CCS环境配置与启动模式详解

本文详细介绍了在CCS开发环境中从零构建TMS320C6678多核DSP工程的完整流程。内容涵盖KeyStone架构解析、工程创建、基础代码编写、链接命令文件配置、仿真器调试,并重点深入讲解了包括I2C EEPROM在内的多种一级启动模式原理与配置方法,为开发者提供了一套清晰、可复用的实战指南。

weixin_29164185的博客 418

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 365

华硕笔记本+Ubuntu 20.04:用cpupower解决Intel CPU频率上不去/功耗墙问题实战

本文详细介绍了在华硕笔记本Ubuntu 20.04系统下使用cpupower工具解决Intel CPU频率受限和功耗墙问题的实战方法。通过禁用Intel P-State驱动、配置userspace模式以及高级调优技巧,帮助用户突破性能瓶颈,提升编译和计算效率。

weixin_42561476的博客 524

android Home键监听封装

public class HomeWatcher {        static final String TAG = "HomeWatcher";       private Context mContext;       private IntentFilter mFilter;       private OnHomePressedListener mListener;    

junjianzhang的专栏 467

CasADi - 最优控制开源 Python/MATLAB 库

CasADi 是一款开源软件工具,用于数值优化,特别是最优控制(即涉及微分方程的优化)。该项目由 Joel Andersson 和 Joris Gillis 在鲁汶工程大学工程优化中心 (OPTEC) 在读博士生在 Moritz Diehl 的指导下发起。本文档旨在简要介绍 CasADi。

机器人控制与仿真应用 7932

SAP Fiori Launchpad 上看不到任何 tile 应该怎么办?

中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 941

监听方法Android之Home键监听封装

本文是一篇关于监听方法的帖子 尽人皆知,我们监听返回键事件,无法是上面两个方法: @Override public void onBackPressed() { //do something //super.onBackPressed(); } @Override public boolean onKeyDown(int keyCode, KeyEve...

weixin_30588827的博客 85

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android监听HOME键的另外一种方法

众所周知,我们监听返回键事件,无法是下面两个方法:

DylanAndroid 1415

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android监听Home键

一:Android 中Home键监听和Back键监听的区别: (1).在Android中,当按下Home键的时候,默认情况下Stop前台的Activity,即Activity设置成停止状态【onStop()】,而不是销毁状态【onDestory()】。如果再次启动该Activity,不是调用onCreate()方法,而是调用onSavedInstanceState方法。则是从onRestar...

Makenna's World 168

Android_监听Home按键的封装

众所周知,我们监听返回键事件,无法是下面两个方法: [java] view plaincopy @Override       public void onBackPressed() {           //do something           //super.onBackPressed();       }           

zimo2013的技术博客 1981
上一篇: android中textview显示自汗,字母,数字乱行行问题解决
下一篇: 代码混淆
僤尐僤
博客等级 码龄14年 10粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值