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开发中,有时我们需要对用户的操作进行监听,比如用户按下Home键、电源键或音量键等。本文将详细讲解如何使用BroadcastReceiver来监听这些关键事件,并介绍相关的Android基础知识。 首先,...
在Android开发中,有时我们需要对用户的操作进行特殊处理,例如监听Home键的按下事件。Home键是Android系统中最基础的功能键之一,通常用于退出当前应用并返回桌面。然而,由于Android系统的安全性和权限管理,直接...
然而,对于Home键、Back键等系统键,可以通过重写Activity的onKeyDown()和onKeyUp()方法来监听。如果需要监听自定义的软键盘按键或者特定的硬件按键,可以创建一个自定义的BroadcastReceiver,然后在需要的地方发送...
在Android系统中,Home键是用户最常用的导航键之一,它可以帮助用户快速返回主屏幕。而长按Home键则是Android的一项特色功能,可以唤出“近期任务”列表,让用户能够轻松切换到最近使用的应用程序。在某些开发场景下...
常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYCODE_MENU 在一个activity 重载父类 的下面这三个方法来处理按键事件 public boolean onKeyDown(int keyCode, KeyEvent event):...
当用户按下电源键锁定屏幕时,系统会发送ACTION_SCREEN_OFF广播。在AndroidManifest.xml中注册一个BroadcastReceiver,并在对应的onReceive()方法中处理锁屏事件。 - **Service**: 如果需要在后台持续执行某些任务...
由于监听Home键并不在Android官方API中公开支持,所以这种方法可能在某些设备或Android版本上不起作用。为了监听Home键,开发者通常会捕获这个系统级别的广播,但需要注意的是,这种做法可能因违反Android的设计原则...
6. **权限管理**:为了实现这些功能,应用可能需要请求额外的权限,如READ_PHONE_STATE用于监听电源键,SYSTEM_ALERT_WINDOW(悬浮窗权限)用于显示全屏界面。 7. **Service与BroadcastReceiver**:为了在后台持续...
Android系统支持多种类型的按键,包括物理按键(如电源键、音量键)和触摸屏上的虚拟按键(如菜单键、返回键)。每个按键都有一个独特的码值,这个码值在`KeyEvent`类中定义。例如,`KeyEvent.KEYCODE_POWER`表示...
- 特权访问:某些按键事件,如电源键,可能需要系统权限才能监听和处理,普通应用通常无法直接访问。 综上所述,这份压缩包可能包含对Android源码中按键处理的详细分析,包括硬件驱动、Input子系统、按键事件的...
当然,这种方法并不是真正意义上的“锁死”,用户仍然可以通过其他方式(如长按电源键)退出应用。 需要注意的是,这样的做法并不符合Google的Material Design规范,可能会给用户带来困扰,因此在实际开发中应谨慎...
- 挂机键(电源键)的处理较为复杂,因为Android系统不提供直接的API来监听电源键事件。通常需要注册`BroadcastReceiver`监听`ACTION_POWER_KEY`广播,然后在接收到电源键事件时执行相应操作。 4. **解锁逻辑实现*...
Android系统支持多种物理按键,如电源键、返回键、菜单键、HOME键、相机键、音量键、搜索键以及方向键等。这些按键提供了丰富的操作功能,使得用户可以在没有触摸屏的情况下也能有效地控制设备。本文将详细讲解...
本文将深入剖析 Android 设备从按下电源键到最终呈现用户界面的全过程,分为三个主要阶段进行详细探讨。 #### 二、OS-Level 阶段 在这一阶段,设备启动过程始于 Bootloader,它负责加载 Linux 内核,并执行内核...
硬件按键包括常见的电源键、音量键等,而软件按键则常见于虚拟键盘上的按键。 1. **事件监听**: 在Android中,我们通常通过`View`类的`OnClickListener`和`OnTouchListener`接口来监听用户的点击事件。对于按键...
某些设备可能需要按电源键和Home键(如果有的话)。 - 屏幕录制:除了截图,Android也支持屏幕录制,这可以在设置中找到或通过第三方应用实现,可以记录屏幕上发生的所有动作并保存为视频。 2. 自定义截屏: - ...
4. **广播接收器**:为了实现一键锁屏的功能,可以创建一个`BroadcastReceiver`监听特定的事件,例如home键或者自定义快捷方式的点击。当收到这个事件时,启动服务进行锁屏。 5. **用户界面**:尽管“一键”意味着...
Emulator提供了许多快捷键来模拟设备操作,如电源键、音量键等。 #### 9.4 参数 开发者可以通过指定不同的参数来定制Emulator的行为,例如屏幕分辨率、内存大小等。 ### 10. 教程:创建并运行Android虚拟设备 该...
2. **屏蔽系统键**: 实现屏蔽Home键、返回键和挂机键的功能,通常需要重写`Activity`的`onKeyDown()`方法,对特定的键值进行拦截处理。例如,当检测到KEYCODE_HOME、KEYCODE_BACK或KEYCODE_CALL等键时,返回`true`以...
- **触发方式**:开机时同时按住“相机”键与“电源”键。 - **特点**:此模式下不加载内核及文件系统,主要用于工厂模式下的固件烧录。 2. **Recovery模式**: - **触发方式**:开机时同时按住“主页”键与...