监听android home键的实现方式

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 立即下载

这个是我重新写的监听home键的方式,以前写的那些方式都不是很好用。现在的这种方式通过广播的方式监听home键,这个比较好使

1.首先是创建一个广播接受者

private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() {
		String SYSTEM_REASON = "reason";
		String SYSTEM_HOME_KEY = "homekey";
		String SYSTEM_HOME_KEY_LONG = "recentapps";
		 
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
				String reason = intent.getStringExtra(SYSTEM_REASON);
				if (TextUtils.equals(reason, SYSTEM_HOME_KEY)) {
					 //表示按了home键,程序到了后台
					Toast.makeText(getApplicationContext(), "home", 1).show();
				}else if(TextUtils.equals(reason, SYSTEM_HOME_KEY_LONG)){
					//表示长按home键,显示最近使用的程序列表
				}
			} 
		}
	};


 2.注册监听 

可以在Activity里注册,也可以在Service里面

//注册广播
		registerReceiver(mHomeKeyEventReceiver, new IntentFilter(
				Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

完整的代码如下:

package com.example.homedemo;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.TextUtils;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//注册广播
		registerReceiver(mHomeKeyEventReceiver, new IntentFilter(
				Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
	}

	 
	/**
	 * 监听是否点击了home键将客户端推到后台
	 */
	private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() {
		String SYSTEM_REASON = "reason";
		String SYSTEM_HOME_KEY = "homekey";
		String SYSTEM_HOME_KEY_LONG = "recentapps";
		 
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
				String reason = intent.getStringExtra(SYSTEM_REASON);
				if (TextUtils.equals(reason, SYSTEM_HOME_KEY)) {
					 //表示按了home键,程序到了后台
					Toast.makeText(getApplicationContext(), "home", 1).show();
				}else if(TextUtils.equals(reason, SYSTEM_HOME_KEY_LONG)){
					//表示长按home键,显示最近使用的程序列表
				}
			} 
		}
	};
}

下面是以前写的监听方式,现在大部分都不好使了,这次作为更新

----------------------------------------------------------------------------------------------------------------------------------------------------------



监听Home键一直困扰这大家,也是让大家非常纠结的问题,从我的博客点击量上看,就知道这个问题有多么难以解决。

此篇博客又来了一次修改,第一部分是解决2.2或者之前系统版本home的监听,第二部分是4.0.x的home监听

第一部分:

如果想监听home键,实现方式有几种

第一种方式:android 对home键的监听,加上了权限,必须取得对处理home键事件的权限,才能对home键进行操作,

只对2.2及以前的系统有效。

     1,加上权限

      <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

     就是让键盘守卫失去能了,根据英文大体是这个意思

    2,重载以下两个方法@Override

 public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(KeyEvent.KEYCODE_HOME==keyCode){

       //写要执行的动作或者任务
         android.os.Process.killProcess(android.os.Process.myPid()); 

 }
  return super.onKeyDown(keyCode, event);
 }

   @Override
    public void onAttachedToWindow(){
       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
       super.onAttachedToWindow();
    }

第二种方式:可能需要修改源代码,修改系统的源码,这样比较麻烦,不建议使用,就用第一种方式就行了

还有其他变通的是实现方式,就是根据自己的业务,可以判断出点击了Home键。


由于这篇文章写的比较早,没有测试过2.3和之后的版本,书写有误,在此抱歉。之后再想监听Home键应该只能修改源码了。对android研究比较深的朋友可以尝试一下。找到屏蔽home键的地方,给我私信,谢谢。希望咱们大家能把这个纠结于很多程序员的问题给解决了,算是给程序员减少点纠结的工作,大家一起努力解决吧。

第二部分:

第一部分的方式一的

代码移植到4.0.1后 this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 这行报错,

错误提示:java.lang.IllegalArgumentException: Window type can not be changed after the window is added。

可以有两种处理方式

方法一、修改PhoneWindowManager.java

if (keyCode == KeyEvent.KEYCODE_HOME) {
	//在这里发送一个广播出去
}

在应用里接收到广播后做相应处理,一般是做系统时才会去改源码。

方法二、检测log,根据log判断是否有点击Home键

private boolean isTesting = true;

class CatchLogThread extends Thread {
	@Override
	public void run() {
		Process mLogcatProc = null;
		BufferedReader reader = null;
		String line;
		while (isTesting) {
			try {
				// 获取logcat日志信息
				mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat", "ActivityManager:I *:S" });
				reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));
				while ((line = reader.readLine()) != null) {
					if (line.indexOf("android.intent.category.HOME") > 0) {
						isTesting = false;
						handler.sendMessage(handler.obtainMessage());
						Runtime.getRuntime().exec("logcat -c");//删除日志
						break;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
};

Handler handler = new Handler() {
	public void handleMessage(android.os.Message msg) {
		Log.i(TAG,"Home key press");
		//do something here
	};
};

这个方式出自这篇博客 http://blog.youkuaiyun.com/goleftgoright/article/details/7756111获取log的方法: http://blog.youkuaiyun.com/xys289187120/article/details/6765046


这张方式我先记到我的博客上了,经过测试之后,再修改在修改一下,到时候用的时候方便


如果哪位兄弟有更好的解决方案,请私信我。

【AI产品思路】用户旅程图与用户全生命周期:到底是什么关系? 用户旅程图(User Journey Map)和用户全生命周期(User Lifecycle)是两种不同的分析框架。用户旅程聚焦单次交易体验的完整过程(如浏览→下单→售后),关注触点、情绪和优化点;而用户生命周期则关注用户与平台的长期关系(从认知到流失),着重提升留存和LTV。两者互为补充:生命周期是时间维度的关系框架,旅程图是行为维度的体验路径。电商运营中,旅程优化改善单次体验,生命周期优化解决长期增长问题,二者结合才能实现体验提升与商业效率的双赢。 阅读详情

相关推荐

解密OpenVLA的ActionTokenizer:如何用256个Token控制7维机器人动作

本文深入解析了OpenVLA模型中ActionTokenizer的核心机制。该分词器通过将7维连续机器人动作空间离散化为256个Token,巧妙地解决了大语言模型输出精确控制指令的难题。文章详细阐述了其设计哲学、与Llama-2词表的集成方式,并分析了256个离散区间在精度与效率间的平衡,为机器人视觉-语言-动作控制提供了关键技术桥梁。

weixin_29209801的博客 475

Android监听Home键实例详解

Android监听Home键实例详解

dodod2012的专栏 2906

弘玑RPA进阶攻略

01.弘玑RPA产品概要。02.设计器的安装与卸载。03.设计器特性与使用。

长安诗社社长@-梁瀚文- https://github.com/HevnChin https://gitee.com/HevnChin 3640

Android 9-- 源码角度: Home键的监听和拦截

在做应用层APP需求的过程中,HOME键的监听,Back键的监听,这都是很常见的问题,那你有试过,去拦截HOME键的事件吗,有去了解过如何处理吗,流程如何。首先大家应该先了解一种情况,就是Android在应用中是无法拦截Home键的,今天我们带大家看一下Home键的三种情况。中判断通过keyCode == KeyEvent.KEYCODE_HOME是不能拦截的。在Android应用中如果想监听Home键可以使用广播机制,这个在源码中也有体现。这样就可以监听Home的是否被按下。这是源码的具体类跟地址。

binbin 2291

电子系统设计与创新实践作品:简易电子琴

题目 4:简易电子琴 (1)具有8个音阶按键,每个音阶按键频率如表1所示。 (2)每个按键对应LED显示。 (3)音阶信号经功放连接8欧姆扬声器,输出功率可达1W。 (4)每个音阶输出音量一样。 (5)扬声器输出音量可调节,音量调节分为高、中、低三档,并进行档位显示。

weixin_47510497的博客 2856

基于NE555的触摸延时开关电路设计与实现

本文详细介绍了基于NE555芯片的触摸延时开关电路设计与实现方法。通过分析NE555的单稳态工作模式,结合定时电阻、电解电容等关键元件选型,提供了一套完整的电路搭建方案。文章还包含抗干扰设计、调试技巧及常见故障处理,帮助电子爱好者快速掌握触摸延时灯的制作要点。

weixin_29268267的博客 788

Android 解决监听home键的方法

Android 解决监听home键的方法

weixin_42602900的博客 782

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3240

Android 监听主页HOME键

APP 一般无法直接监听主页键(HOME)的按键事件,在 onKeyDown 方法中是监听不到的,因为 HOME 键是在 PhoneWindowManager 中处理的,不会分发到应用。 应用如何监听这个事件呢,答案是接收 Intent.ACTION_CLOSE_SYSTEM_DIALOGS 广播 。 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public v

weixin_44021334的博客 1419

RK3568平台开发系列讲解(外设篇)CAN的使用

📢 本篇章带大家快速了解CAN的使用。

内核笔记 2352

基于 STM32 的全自动洗车监控系统设计与实现

本文提出一种基于 STM32F103RCT6 芯片的全自动洗车监控系统方案,通过多传感器融合与智能控制算法,实现车辆检测、洗车流程自动化及状态远程监控。系统集成硬件选型、电路设计、软件流程及通信功能,可广泛应用于智能洗车场景。

weixin_42300449的博客 964

android 点击home键事件,监听android home键的实现方式

public boolean onKeyDown(int keyCode, KeyEvent event) {if(KeyEvent.KEYCODE_HOME==keyCode){//写要执行的动作或者任务android.os.Process.killProcess(android.os.Process.myPid());}return super.onKeyDown(keyCode, event...

weixin_39824898的博客 287

弥散圆以及最大弥散圆

1弥散圆的形成? 原本景物中的一点应该经过透镜本应该也是一点才对。但是因为离焦,球差的存在,最终成像会投影成一个光斑圆圈。越小越清晰,越大就互相干涉变得越模糊。 同时人们规定二零最大弥散圆,就是人眼能够感受清晰模糊的一个边界,直径大于它,感受到模糊;直径小于它,感受不到模糊。 下面分别是离焦(左),球差(右)。 2弥散圆大小怎么计算呢? ,f为焦距;<1> ,D为光圈有效孔径;<2> F=f/D; <3> 3条公式合并可得出: ...

camerall 3114

监听android home键的实现方式 和back键

原文地址:http://blog.youkuaiyun.com/com360/article/details/6663586 监听Home键一直困扰这大家,也是让大家非常纠结的问题,从我的博客点击量上看,就知道这个问题有多么难以解决。 此篇博客又来了一次修改,第一部分是解决2.2或者之前系统版本home的监听,第二部分是4.0.x的home监听 第一部分: 如果想监听home键,实现方式有几种 第一

winson_jason的专栏 2258

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android home键广播监听,监听android home键的实现方式

import android.app.Application;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.text.TextUtils;i...

weixin_36230923的博客 557

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

监听android home键的实现方式 创建一个广播接受者

点击打开链接

xuwuhao的专栏 541

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

监听android home键新的实现方式

现在的这种方式通过广播的方式监听home键,这个比较好使,转载别人的自己留着用。 1.首先是创建一个广播接受者 [java] view plain copy private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() {           String SY

445
上一篇: MIME
下一篇: android完全退出应用程序的三种方式
com360
博客等级 码龄16年 225粉丝 137原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值