我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android监听home键的方法详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android监听home键的方法详解

本文实例分析了Android监听home键的方法。分享给大家供大家参考,具体如下:

如何知道Home按钮被点击了呢?做launcher的时候,看源代码发现原因

如果你的Activity具备这些属性


<activity
 android:name="com.woyou.activity.HomeActivity"
 android:launchMode="singleInstance" >
 <intent-filter>
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.HOME" />
  <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
</activity>

当系统点击Home按键的时候,系统会向具有这些属性的Activity发出intent

然后你重写Activity的onNewIntent方法

这个方法就会回调onNewIntent这个方法

已验证可用!

下面这个是我重新写的监听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));
 }
 
 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
 };
};

这个方式出自这篇文章《android 4.0.x Home键事件拦截/监听》
获取log的方法:《Android开发之在程序中时时获取logcat日志信息的方法》

这个方式先在这里分享给大家,经过测试之后,再修改在修改一下,到时候用的时候方便

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:Android 屏蔽和捕获Home键的示例代码Android监听Home键和Back键的区别介绍Android中监听Home键的4种方法总结android4.0屏蔽HOME键的简单实现Android应用开发中模拟按下HOME键的效果(实现代码)android里面屏蔽home键/禁止Home键或者随你DIYAndroid 中按home键和跳转到主界面的实例代码


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android监听home键的方法详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android监听home键的方法详解

本文实例分析了Android监听home键的方法。分享给大家供大家参考,具体如下: 如何知道Home按钮被点击了呢?做launcher的时候,看源代码发现原因 如果你的Activity具备这些属性
2022-06-06

Android监听Home键实例详解

本文实例讲述了Android监听Home键的方法。分享给大家供大家参考,具体如下: 将到android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_
2022-06-06

Android 解决监听home键的几种方法

Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键)。 一、使用注册广播监听home键、多任务键 演示图创建一个广播代码如下:class InnerRecevier
2022-06-06

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

昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,
2022-06-06

Android监听Home键和Back键的区别介绍

一:Android 中Home键监听和Back键监听的区别: (1).在Android中,当按下Home键的时候,默认情况下Stop前台的Activity,即Activity设置成停止状态【onStop()】,而不是销毁状态【onDesto
2022-06-06

Android4.0.x Home键事件拦截监听的方法

本文实例讲述了Android4.0.x Home键事件拦截监听的方法。分享给大家供大家参考,具体如下: 在2.3.x 的主要做法如下,具体实现网上有很多文章@Override public void onAttachedToWindow()
2022-06-06

Android中Home键的监听和拦截示例

首先大家应该先了解一种情况,就是Android在应用中是无法拦截Home键的,今天我们带大家看一下Home键的三种情况。 1、在应用中按下Home键的逻辑处理 当我们在应用中按下Home键时界面会启动到桌面,我们在frameworks\ba
2022-06-06

Android ListView监听滑动事件的方法(详解)

ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1、OnTouchListener OnTouchListener方法来自View中的监听事件,可以在监听三个Action事件发
2022-06-06

android studio按钮监听的5种方法实例详解

1.匿名内部类public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void on
2022-06-06

Android 实现监听的四种方法详解实例代码

直接上代码,大家可以参考下 (1)自身类作为事件监听器package cn.edu.gdmec.s07150745.work5; import android.support.v7.app.AppCompatActivity; import
2022-06-06

Android ListView里控件添加监听方法的实例详解

Android ListView里控件添加监听方法的实例详解 关于ListView,算是android中比较常见的控件,在ListView我们通常需要一个模板,这个模板指的不是住模块,而是配置显示在ListView里面的东西,今天做项目的时
2023-05-30

Android项目中监听软键盘的方法有哪些

Android项目中监听软键盘的方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。function 1:重写Activity的dispatchKeyEve
2023-05-31

Android监听键盘状态获取键盘高度的实现方法

前言 Android暂时还没有提供一个合适的API来获取/监听键盘的状态和高度 , 而我们又经常会有这个需求. 最近我的一个项目中,在ugc页面需要在键盘顶部,紧贴着键盘显示一个文字提示,当键盘消失时就隐藏. 因此,我需要监听软键盘的打开/
2022-06-06

Android 滑动监听的实例详解

Android 滑动监听的实例详解摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置),view.ScollyBy是对view的内
2023-05-30

Android监听软键盘弹出与隐藏的两种方法

需求: 现在有一个需求是点击一行文本框,弹出一个之前隐藏的输入框,输入完成后按返回键或者其他的东西隐藏键盘和输入框,将输入框的内容填充到文本框中。 实现: 拿到这个需求的第一反应就是写一个监听来监听键盘的显示和隐藏来控制输入框的显示和隐藏,
2022-06-06

Android App实现监听软键盘按键的三种方式

前言: 我们在Android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“Go”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入
2022-06-06

Android中监听短信的两种方法

1、监听广播 缺点,因为优先级的原因可能接收不到。 代码:public static final String TAG = "ImiChatSMSReceiver";public static final String SMS_RECEIV
2022-06-06

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录