安卓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

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1805

数据采集卡架构与PCIe优化设计详解

数据采集卡(DAQ)作为工业自动化中的关键设备,其核心在于模数转换(ADC)和数字信号处理技术。现代系统普遍采用PCIe总线架构,通过DMA传输和时钟同步技术实现高速数据采集。在信号调理环节,可编程增益放大器(PGA)和抗混叠滤波器确保信号质量;而Σ-Δ型ADC则提供高达24位的分辨率。实际应用中,从电力监测到机床振动分析,数据采集卡需要结合具体场景优化配置。通过合理的PCB布局和EMI防护设计,可以有效提升系统在工业环境中的可靠性。

weixin_29168675的博客 910

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

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

你只是看起很努力 4178

机械臂抓取前言

机械臂相关的笔记

weixin_64037619的博客 3908

Android 解决监听home键的方法

Android 解决监听home键的方法

weixin_42602900的博客 782

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

STM32H745xI双核芯片SMPS/LDO配置误区:从复位失败到精准排查的实战复盘

本文详细分析了STM32H745xI双核芯片在SMPS/LDO配置中的常见误区,特别是复位失败问题的排查过程。通过对比参考板与故障板的波形数据,揭示了电感选型不当导致的电源稳定性问题,并提供了硬件设计检查清单和调试技巧,帮助开发者避免类似陷阱。

weixin_42531588的博客 265

基于STM32H750的便携式双通道示波器与信号发生器AFE设计

示波器和信号发生器是电子测量与嵌入式系统调试的基础仪器,其核心在于模拟前端(AFE)对宽动态范围、高精度采样与低失真输出的协同实现。原理上需兼顾输入信号调理(衰减/放大/偏置)、ADC/DAC接口匹配、触发同步及电源完整性设计。技术价值体现在以低成本器件达成±15V输入/±10V输出、16位等效采样精度与85kHz带宽的工程平衡。典型应用场景包括电机驱动波形观测、传感器信号验证、电源环路测试及通信电平分析。本方案聚焦STM32H750平台,深度融合硬件拓扑与片上资源特性,为嵌入式教学与原型开发提供可复现、易

weixin_35755188的博客 107

android Home键监听封装

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

junjianzhang的专栏 467

nginx配置视频流加密防盗链(一)安装nginx插件

前段时间研究了一下视频流的简单加密防盗链,参考了很多文章,最后总算搞出来了。现在自己总结了一下。

u013294657的博客 1864

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)

简单介绍了X-BAR。

whyorwhnt的专栏 2万+

监听方法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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android监听Home键

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

Makenna's World 168

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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、付费专栏及课程。

余额充值