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

大智慧L2实时api接口的逐笔委托功能执行代码分享

用过l2行情接口的投资者应该都了解大部分的接口都是有逐笔委托功能的,那么大智慧L2实时api接口也有着很强大的逐笔委托功能,投资者可以通过这个逐笔委托功能可以看到一个股票的每天出现的全部委托指令,那么在这个逐笔委托功能里包含了委托价格、委托时间、委托量和委托方向四个要素!那么接下来小编就分享一下大智慧L2实时api接口的逐笔委托功能执行代码!那么在这里提个醒:投资者可以在大智慧L2实时api接口进行设置过滤,在逐笔委托列表里,就仅仅只会显示超过设置委托量或委托额的委托单,而不再显示小单。

Qq_2037696191的博客 3732

【Telephony】Telephony总纲!Phone进程流程(AOSP)

整个Framework层的Telephony框架运行在一个叫做Phone(com.android.phone)的进程中。 Phone进程启动的过程中,会初始化非常多的分支功能,SIM卡流程初始化就是其中之一,所以我觉得有必要写一下Phone进程的框架

weixin_44513784的博客 1975

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

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

你只是看起很努力 4178

opencv+nvcodec实现视频硬解码

最近遇到一个新项目,AI推理在上,为了方便和节省成本的考虑决定研究下模块。根据官网的说法显卡具有独立的和模块,所以理论上和是独立互不干涉的。以前的项目都只是把显卡当成推理工具,没有将它的功能利用起来,本身也是一种浪费。事实真的有这么丝滑吗?看到这里,如果你真的觉得是白叫的那就真的是了,事实究竟如何,请听我娓娓道来。NVCODEC全称是 NVIDIA VIDEO CODEC,是NVIDIA为绝大多数显卡配置的硬件编解码单元。不一定是所有显卡都有,一般来讲越新的显卡硬件编解码就越强,支持的格式也就越新。

jiexijihe945的博客 1万+

Android 解决监听home键的方法

Android 解决监听home键的方法

weixin_42602900的博客 782

用Gazebo仿真无人机视觉SLAM:ORB-SLAM2+RGB-D相机完整调试记录

本文详细介绍了在Gazebo仿真环境中优化ORB-SLAM2用于无人机视觉SLAM的完整调试过程。通过定制传感器配置、调整ORB-SLAM2参数以及优化点云处理策略,显著提升了无人机在仿真环境中的SLAM性能。文章还提供了实用的调试技巧和性能评估方法,帮助开发者高效实现无人机视觉SLAM系统的仿真测试。

weixin_30485379的博客 449

点云中的Minkowski卷积

一、MinkowskiEngine简介 第一次见到MinkowskiEngine,应该是在两个月之前了,当时也没有去留意这个库。最近读了一些点云的论文,发现还是有不少论文的源码是基于MinkowskiEngine的,包括PointContrast(ECCV 2020),DGR(Deep Global Registration, CVPR 2020),Learning Multiview 3D Point Cloud Registration(CVPR 2020)和FCGF(Fully Convolution

zhulf0804的博客 7906

流媒体协议-RTMP简介

与rtsp 不同,RTSP(Real-Time Streaming Protocol)是一个控制协议,负责控制媒体流的传输,但不传输媒体数据本身。RTSP 可以通过 TCP 或 UDP 传输 RTP 包来传输音视频数据。 RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制

xiaoshuaijinniu的博客 4550

android Home键监听封装

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

junjianzhang的专栏 467

171、运动控制中的标定:摩擦力与死区补偿标定

摘要(149字) 运动控制系统中的摩擦力与死区补偿是提升精度的关键。摩擦力分为静摩擦、库仑摩擦和粘滞摩擦,其中Stribeck效应是低速抖动的主因;死区则表现为控制信号的无效区间。有效标定方法包括恒速测试(摩擦力)和斜坡响应法(死区)。补偿策略需采用分段前馈和动态调整,避免过度补偿导致振荡。实践中要注意机械状态检查、补偿量限幅,并定期重新标定。硬件升级配合算法补偿才能实现最优控制,标定工作应优先于PID参数调整。

m0_50546716的博客 227

​非线性分析-增加位移量可能出现下面错误。虽然求解无法在所有时间点完成,但在某些点上仍能够求解部分结果。请参阅“帮助系统”中的故障排除,以了解更多信息详情。由于受约束,规划求解引擎无法收敛

基于收敛状态拆分载荷步‌:在已收敛的载荷步基础上,将未收敛的关键区域拆分为更细的子步,比如在载荷突变点前设置5~10个子步,逐步加载。替换冲突约束为弱约束‌:若存在约束冲突,将刚性约束替换为弱弹簧约束(刚度设为1e-6~1e-4),既限制刚体位移,又不影响结构的变形自由度,命令流:SPRING, NODE, K, 1e-6。部分区域约束完整,但存在未被约束的刚体自由度,或约束类型与大变形/接触逻辑冲突,比如某部件的位移约束在初始阶段有效,但大变形后约束位置脱离实际受力点,导致求解器在该阶段无法收敛。

qq_15963745的博客 144

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

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

weixin_30588827的博客 85

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

DylanAndroid 1415

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

余额充值