Android监听Home、电源键

一、Home键监听

先禁止Home键,再在onKeyDown里处理按键值,点击Home键的时候就把程序关闭(此方法在4.0及以上版本中不可用)

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

>

@Override

publicbooleanonKeyDown(intkeyCode, KeyEvent event)

{//TODO Auto-generated method stub

if(KeyEvent.KEYCODE_HOME==keyCode)

android.os.Process.killProcess(android.os.Process.myPid());

returnsuper.onKeyDown(keyCode, event);

}

@Override

publicvoidonAttachedToWindow()

{//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 zhouchaoxin
*
*/
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 zhouchaoxin
*
*/
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 zhouchaoxin
*
*/
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(); //关闭监听

}


}
}

更多相关文章

  1. android ApiDemo学习(一)service总结
  2. Android(安卓)单独抽取 WebRtc-AGC(音频增益) 模块
  3. Android:Error retrieving parent for item: No resource found
  4. 安卓开发入门学习笔记
  5. Android(安卓)性能监控与分析方法
  6. android View 重绘机制
  7. Android(安卓)解决setRequestedOrientation之后手机屏幕的旋转不
  8. 详解 Android(安卓)的 Activity 组件
  9. android progressDialog的使用

随机推荐

  1. mysql id从1开始自增 快速解决id不连续的
  2. Mysql自增主键id不是以此逐级递增的处理
  3. ARM64架构下安装mysql5.7.22的全过程
  4. QT连接MYSQL数据库的详细步骤
  5. mysql 8.0.25 解压版安装配置方法图文教
  6. Linux下mysql 8.0.25 安装配置方法图文教
  7. mysql备份策略的实现(全量备份+增量备份)
  8. mysql 8.0.25 安装配置方法图文教程
  9. mysql定时自动备份数据库的方法步骤
  10. MYSQL数据库基础之Join操作原理