Android利用广播监听按下HOME和电源键
package cc.testhome; import cc.testhome.HomeKeyObserver.OnHomeKeyListener;
import cc.testhome.PowerKeyObserver.OnPowerKeyListener;
import android.os.Bundle;
import android.app.Activity;
/**
* Demo描述:
* 利用广播监听Home键的按下和长按Home键
* 利用广播监听电源键的按下(关闭屏幕)
*
* 参考资料:
* 1 http://blog.csdn.net/q445697127/article/details/8432513
* 2 http://blog.csdn.net/watt520/article/details/18959897
* 3 http://blog.csdn.net/lfdfhl/article/details/9903693
* Thank you very much
*/
public class MainActivity extends Activity {
private HomeKeyObserver mHomeKeyObserver;
private PowerKeyObserver mPowerKeyObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
} private void init() {
mHomeKeyObserver = new HomeKeyObserver(this);
mHomeKeyObserver.setHomeKeyListener(new OnHomeKeyListener() {
@Override
public void onHomeKeyPressed() {
System.out.println("----> 按下Home键");
} @Override
public void onHomeKeyLongPressed() {
System.out.println("----> 长按Home键");
}
});
mHomeKeyObserver.startListen(); ////////////////////////////////////////// mPowerKeyObserver = new PowerKeyObserver(this);
mPowerKeyObserver.setHomeKeyListener(new OnPowerKeyListener() {
@Override
public void onPowerKeyPressed() {
System.out.println("----> 按下电源键");
}
});
mPowerKeyObserver.startListen();
} @Override
protected void onDestroy() {
super.onDestroy();
mHomeKeyObserver.stopListen(); ////////////////////////////////////////// mPowerKeyObserver.stopListen();
} }
package cc.testhome; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter; public class HomeKeyObserver {
private Context mContext;
private IntentFilter mIntentFilter;
private OnHomeKeyListener mOnHomeKeyListener;
private HomeKeyBroadcastReceiver mHomeKeyBroadcastReceiver;
public HomeKeyObserver(Context context) {
this.mContext = context;
} //注册广播接收者
public void startListen(){
mIntentFilter=new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mHomeKeyBroadcastReceiver=new HomeKeyBroadcastReceiver();
mContext.registerReceiver(mHomeKeyBroadcastReceiver, mIntentFilter);
System.out.println("----> 开始监听");
} //取消广播接收者
public void stopListen(){
if (mHomeKeyBroadcastReceiver!=null) {
mContext.unregisterReceiver(mHomeKeyBroadcastReceiver);
System.out.println("----> 停止监听");
}
} // 对外暴露接口
public void setHomeKeyListener(OnHomeKeyListener homeKeyListener) {
mOnHomeKeyListener = homeKeyListener;
} // 回调接口
public interface OnHomeKeyListener {
public void onHomeKeyPressed();
public void onHomeKeyLongPressed();
} //广播接收者
class HomeKeyBroadcastReceiver extends BroadcastReceiver{
final String SYSTEM_DIALOG_REASON_KEY = "reason";
//按下Home键
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
//长按Home键
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "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_DIALOG_REASON_KEY);
if (reason != null && mOnHomeKeyListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
mOnHomeKeyListener.onHomeKeyPressed();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
mOnHomeKeyListener.onHomeKeyLongPressed();
}
}
}
}
} }
package cc.testhome; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter; public class PowerKeyObserver {
private Context mContext;
private IntentFilter mIntentFilter;
private OnPowerKeyListener mOnPowerKeyListener;
private PowerKeyBroadcastReceiver mPowerKeyBroadcastReceiver;
public PowerKeyObserver(Context context) {
this.mContext = context;
} //注册广播接收者
public void startListen(){
mIntentFilter=new IntentFilter(Intent.ACTION_SCREEN_OFF);
mPowerKeyBroadcastReceiver=new PowerKeyBroadcastReceiver();
mContext.registerReceiver(mPowerKeyBroadcastReceiver, mIntentFilter);
System.out.println("----> 开始监听");
} //取消广播接收者
public void stopListen(){
if (mPowerKeyBroadcastReceiver!=null) {
mContext.unregisterReceiver(mPowerKeyBroadcastReceiver);
System.out.println("----> 停止监听");
}
} // 对外暴露接口
public void setHomeKeyListener(OnPowerKeyListener powerKeyListener) {
mOnPowerKeyListener = powerKeyListener;
} // 回调接口
public interface OnPowerKeyListener {
public void onPowerKeyPressed();
} //广播接收者
class PowerKeyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
mOnPowerKeyListener.onPowerKeyPressed();
}
}
} }
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent">
<!-- main.xml-->
<textview android:layout_centerinparent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="利用广播监听Home键和电源键">
</textview></relativelayout>
Android利用广播监听按下HOME和电源键的更多相关文章
- Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结
一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...
- Android短信监听实现,及Android4.4之后短信机制变更
前阵子公司有一个项目,简单的监听短信应用,功能只有如下两个: 1.监听短信并获取短信内容上传服务器: 2.从服务器获取短信内容,发送出去 按照传统的思路,监听短信我们有两种方式:第一种是使用广播 ...
- Android实现网络监听
一.Android Wifi常用广播 网络开发中主体会使用到的action: ConnectivityManager.CONNECTIVITY_ACTION WifiManager.WIFI_STAT ...
- Android 手势水平监听判断
package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- android的电话监听
android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...
- Android零基础入门第34节:Android中基于监听的事件处理
原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...
- Android中如何监听GPS开启和关闭
转自 chenming 原文 Android中如何监听GPS开启和关闭 摘要: 本文简单总结了如何监听GPS开关的小技巧 有时需要监听GPS的开关(这种需求并不多见).实现的思路是监听代表 GPS ...
- 【Android测试】【随笔】模拟长按电源键
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html 起因 昨天群里看到有人问如何实现一个 ...
- android应用程序监听SMS Intent广播
当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent. 对于应用程序监听SMS Intent广播,首先需 ...
随机推荐
- 从输入URI到浏览器渲染中间都经历了什么
这篇文章总共分为两个部分,第一部分我会把从输入url到浏览器渲染的整个流程给大致说一下.第二部分我就会一一介绍各个部分的详细作用. 一.从输入url到浏览器渲染的整个流程 1.DNS域名解析 2. ...
- JetBrain学信网注册(Clion)
一.打开网站 首先打开JetBrains关于学生认证的网站:https://www.jetbrains.com/shop/eform/students,可以看见以下页面: 二.人工验证 人工验证适合于 ...
- 深入了解ApacheZeppelin:如何构建高效的数据科学平台
目录 引言 随着数据科学和人工智能的快速发展,如何构建高效的数据科学平台已经成为一个重要议题.Apache Zeppelin是一个开源的数据科学平台,其提供了一种简单.高效的方式来处理和存储数据,并且 ...
- Linux系统运维之Web服务器Nginx安装
一.介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.本文先整理web服务器内容. 二.环境及软件版本 操作 ...
- 【小小Demo】微信公众号如何接入微信机器人
微信对话开放平台文档 官方文档 平台简介 微信对话开放平台开放了微信在对话领域积累多年的的智能对话技术,开发者及非开发者可简单.快速地搭建智能对话机器人(智能客服), 并接入公众号.小程序等,为业务赋 ...
- Web网页音视频通话之Webrtc相关操作(二)
效果图 HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- CS144 LAB0~LAB4
CS144: LAB0 0.写在前面 这更倾向于个人完成 lab 后的思考和总结,而不是 CS144 lab 答案或者 lab document 翻译(指南或者翻译已经有大佬做的很好了,下面已经贴出链 ...
- [Spring+SpringMVC+Mybatis]框架学习笔记(九):Mybatis主配置文件和映射文件
第9章 Mybatis主配置文件和映射文件 9.1 用Mybatis进行开发的两种方式 在正式的开发环境中用Mybatis进行开发有两种方式: 1)原始的接口和实现类的方式 缺点: 重复代码太多,sq ...
- linux基础命令及常用命令总结
1.ls命令 ls命令是最基础的命令之一,作用是列出当前目录下所有的文件和目录.ls命令有很多选项可以使用,比较常用的是-l选项,可以以详细信息的形式列出所有文件和目录的信息. 示例:列出当前目录下的 ...
- 行行AI人才直播第12期:风平智能创始人林洪祥《AI数字人的技术实践和商业探讨》
行行AI人才是博客园和顺顺智慧共同运营的AI行业人才全生命周期服务平台. 歌手孙燕姿凭借AI翻唱席卷各大视频平台.有视频博主用AI技术复活已故的奶奶,并且与之对话缅怀亲人填补遗憾.更有国外网红通过GP ...