Android监听Home、电源键
一、Home键监听
先禁止Home键,再在onKeyDown里处理按键值,点击Home键的时候就把程序关闭(此方法在4.0及以上版本中不可用)
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission
>
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{ // TODO Auto-generated method stub
if(KeyEvent.KEYCODE_HOME==keyCode)
android.os.Process.killProcess(android.os.Process.myPid());
return super.onKeyDown(keyCode, event);
}
@Override
public void onAttachedToWindow()
{ // TODO Auto-generated method stub
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
二、电源键监听
首先,我们是要获取系统权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
通过监听系统的两个action:
Intent.ACTION_SCREEN_OFF
Intent.ACTION_SCREEN_ON
private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final String action = intent.getAction();
if (Intent.ACTION_SCREEN_OFF.equals(action)) {
//退出程序...
}
}
};
onCreate()方法中注册
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mBatInfoReceiver, filter);
onDestory()方法中解除注册
if(mBatInfoReceiver != null){
try {
unregisterReceiver(mBatInfoReceiver);
} catch (Exception e) {
Log.e(TAG, "unregisterReceiver mBatInfoReceiver failure :"+e.getCause());
}
}
以上简单介绍使用方法,下面实现自定义Home\电源键监听(支持4.0及以上或以下)
/**
* Home键监听
* @author miaowei
*
*/
public class HomeKeyListener {
static final String TAG = "HomeKeyListener";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerRecevier mRecevier;
/**
* Home键监听构造初始化
* @param context
*/
public HomeKeyListener(Context context) {
mContext = context;
mFilter = new IntentFilter();
mFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
mFilter.addAction(Intent.ACTION_SCREEN_OFF);
mFilter.addAction(Intent.ACTION_SCREEN_ON);
}
/**
* 回调接口
* @author miaowei
*
*/
public interface OnHomePressedListener {
/**
* Home键短按
*/
public void onHomePressed();
/**
* Home键长按
*/
public void onHomeLongPressed();
/**
* 监听电源键/开
*/
public void onScreenPressed();
/**
* 监听电源键/关
*/
public void offScreenPressed();
}
/**
* 设置监听
* @param listener
*/
public void setOnHomePressedListener(OnHomePressedListener listener) {
mListener = listener;
mRecevier = new InnerRecevier();
}
/**
* 开始监听,注册广播
*/
public void startHomeListener() {
if (mRecevier != null) {
mContext.registerReceiver(mRecevier, mFilter);
}
}
/**
* 停止监听,注销广播
*/
public void stopHomeListener() {
if (mRecevier != null) {
mContext.unregisterReceiver(mRecevier);
}
}
/**
* 广播接收
* @author miaowei
*
*/
class InnerRecevier extends BroadcastReceiver{
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@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) {
Log.e(TAG, "action:" + action + ",reason:" + reason);
if (mListener != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
// 短按home键
mListener.onHomePressed();
} else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
// 长按home键
mListener.onHomeLongPressed();
}
}
}
}//监听电源键开
if (action.equals(Intent.ACTION_SCREEN_OFF)) {
mListener.offScreenPressed();
}else if (action.equals(Intent.ACTION_SCREEN_ON)) {
mListener.onScreenPressed();
}
}
}
}
在Activity中的使用
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private HomeKeyListener homeKeyListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
homeKeyListener = new HomeKeyListener(this);
homeKeyStart(); //处理方法
homeKeyListener.startHomeListener(); //开启监听
}
/**
* Home键开始监听
*/
private void homeKeyStart(){
homeKeyListener.setOnHomePressedListener(new OnHomePressedListener() {
@Override
public void onHomePressed() {
// 这里获取到home键按下事件
Log.i("lock", "onHomePressed ========================================");
}
@Override
public void onHomeLongPressed() {
Log.i("lock", "onHomeLongPressed ========================================");
}
@Override
public void onScreenPressed() {
// TODO Auto-generated method stub
}
@Override
public void offScreenPressed() {
// TODO Auto-generated method stub
}
});
}
@Override
protected void onDestroy() {
super.onPause();
if(homeKeyListener != null){
homeKeyListener.stopHomeListener(); //关闭监听
}
}
}
相关推荐
一个简单的Android按键监听程序,通过通过BroadcastReceiver监听Home,电源Power,和音量变化Volume键
Android 监听Home键、锁屏、解屏处理方法,都有注释。使用简介: (1)、将内部类(广播类)作为MyBroadcastReceiver类的成员变量,方便activity使用 (2)、对外接口类(如:ScreenStateListener)作为...
我们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在...
android 后台监听按键事件方法及demoandroid 后台监听按键事件方法及demo
android监听,屏蔽多任务键,用来实现重写多任务键功能。
Android 媒体键监听以及模拟媒体键盘的实现 ;
Android App监听软键盘按键的三种方式(http://blog.csdn.net/zhufuing/article/details/18964725)博文中所用的demo
主要介绍了 Android onKeyDown监听返回键无效的解决办法的相关资料,需要的朋友可以参考下
通过Intent.ACTION_CLOSE_SYSTEM_DIALOGS监听Android的Home按键消息实例程序。
该demo实现android拨号键盘拨打电话击联系人功能,并实现服务监听来去电及获取来去电号码功能
主要介绍了android监听返回按钮事件的方法,涉及Android事件监听的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Android 解决监听home键的几种方法 前言: 以下两种方法可以完美解决监听back键,home键,多任务键(最近任务键)。 一、使用注册广播监听home键、多任务键 演示图 创建一个广播代码如下: class InnerRecevier ...
Android APP开发过程中处理,home键点击事件,监听点击home键,做具体处理
昨天需要处理一个问题,需要监听home键。最开始想到使用onKeydonwn这个方法。但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,...
Android中对手机的返回键,Home键以及多功能切换键的监听,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/77045754
在拨号键上输入指定的数字后开启应用,安装后不显示图标.
主要介绍了Android监听Home键和Back键的区别介绍,本文还同时给出了Home键监听的实现代码,需要的朋友可以参考下
android监听app的启动,在API20以前用ActivityManager获取栈顶最近的应用,但API20以后捕捉不到手机上软件包名,这个更改可以获取最近打开app的包名,从而监听打开的APP。
这个Demo主要使用到了android.intent.action.MEDIA_BUTTON这个广播,在灭屏后台的情况下能监听到媒体按键(耳机上只能监听到暂停和播放键音量键捕获不到),我现在实在是没积分了挣点积分,资源是我自己测试过的,...
监听Android软键盘弹出和收起事件(所有代码都是抽离自facebook/react-native源码中, 亲测有效, 放心食用)。回调事件方法参数包含键盘是否弹出(isShow)、键盘高度(keyboardHeight)、屏幕可用高度(screenHeight)、屏幕...