`

Android监听Home、电源键

阅读更多

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键、电源键或音量键等。本文将详细讲解如何使用BroadcastReceiver来监听这些关键事件,并介绍相关的Android基础知识。 首先,...

    android监听home按键实例

    在Android开发中,有时我们需要对用户的操作进行特殊处理,例如监听Home键的按下事件。Home键是Android系统中最基础的功能键之一,通常用于退出当前应用并返回桌面。然而,由于Android系统的安全性和权限管理,直接...

    安卓广播监听按键事件和屏幕熄屏亮屏监听

    然而,对于Home键、Back键等系统键,可以通过重写Activity的onKeyDown()和onKeyUp()方法来监听。如果需要监听自定义的软键盘按键或者特定的硬件按键,可以创建一个自定义的BroadcastReceiver,然后在需要的地方发送...

    模拟android长按home键

    在Android系统中,Home键是用户最常用的导航键之一,它可以帮助用户快速返回主屏幕。而长按Home键则是Android的一项特色功能,可以唤出“近期任务”列表,让用户能够轻松切换到最近使用的应用程序。在某些开发场景下...

    安卓(Android) 监听按键长按事件

     常见的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYCODE_MENU  在一个activity 重载父类 的下面这三个方法来处理按键事件 public boolean onKeyDown(int keyCode, KeyEvent event):...

    亲测,android能锁屏监控到home键

    当用户按下电源键锁定屏幕时,系统会发送ACTION_SCREEN_OFF广播。在AndroidManifest.xml中注册一个BroadcastReceiver,并在对应的onReceive()方法中处理锁屏事件。 - **Service**: 如果需要在后台持续执行某些任务...

    广播监听的demo

    由于监听Home键并不在Android官方API中公开支持,所以这种方法可能在某些设备或Android版本上不起作用。为了监听Home键,开发者通常会捕获这个系统级别的广播,但需要注意的是,这种做法可能因违反Android的设计原则...

    Androidpingbao_HomeHome_android_

    6. **权限管理**:为了实现这些功能,应用可能需要请求额外的权限,如READ_PHONE_STATE用于监听电源键,SYSTEM_ALERT_WINDOW(悬浮窗权限)用于显示全屏界面。 7. **Service与BroadcastReceiver**:为了在后台持续...

    Android 按键映射对应表

    Android系统支持多种类型的按键,包括物理按键(如电源键、音量键)和触摸屏上的虚拟按键(如菜单键、返回键)。每个按键都有一个独特的码值,这个码值在`KeyEvent`类中定义。例如,`KeyEvent.KEYCODE_POWER`表示...

    安卓Android源码——按键的处理.zip

    - 特权访问:某些按键事件,如电源键,可能需要系统权限才能监听和处理,普通应用通常无法直接访问。 综上所述,这份压缩包可能包含对Android源码中按键处理的详细分析,包括硬件驱动、Input子系统、按键事件的...

    android键盘锁死源码

    当然,这种方法并不是真正意义上的“锁死”,用户仍然可以通过其他方式(如长按电源键)退出应用。 需要注意的是,这样的做法并不符合Google的Material Design规范,可能会给用户带来困扰,因此在实际开发中应谨慎...

    Android 屏幕保护源码

    - 挂机键(电源键)的处理较为复杂,因为Android系统不提供直接的API来监听电源键事件。通常需要注册`BroadcastReceiver`监听`ACTION_POWER_KEY`广播,然后在接收到电源键事件时执行相应操作。 4. **解锁逻辑实现*...

    Android 物理按键整理及实例代码

    Android系统支持多种物理按键,如电源键、返回键、菜单键、HOME键、相机键、音量键、搜索键以及方向键等。这些按键提供了丰富的操作功能,使得用户可以在没有触摸屏的情况下也能有效地控制设备。本文将详细讲解...

    android booting分析

    本文将深入剖析 Android 设备从按下电源键到最终呈现用户界面的全过程,分为三个主要阶段进行详细探讨。 #### 二、OS-Level 阶段 在这一阶段,设备启动过程始于 Bootloader,它负责加载 Linux 内核,并执行内核...

    应用源码之按键的处理.zip

    硬件按键包括常见的电源键、音量键等,而软件按键则常见于虚拟键盘上的按键。 1. **事件监听**: 在Android中,我们通常通过`View`类的`OnClickListener`和`OnTouchListener`接口来监听用户的点击事件。对于按键...

    android截屏

    某些设备可能需要按电源键和Home键(如果有的话)。 - 屏幕录制:除了截图,Android也支持屏幕录制,这可以在设置中找到或通过第三方应用实现,可以记录屏幕上发生的所有动作并保存为视频。 2. 自定义截屏: - ...

    Android一键锁屏源码

    4. **广播接收器**:为了实现一键锁屏的功能,可以创建一个`BroadcastReceiver`监听特定的事件,例如home键或者自定义快捷方式的点击。当收到这个事件时,启动服务进行锁屏。 5. **用户界面**:尽管“一键”意味着...

    android教程

    Emulator提供了许多快捷键来模拟设备操作,如电源键、音量键等。 #### 9.4 参数 开发者可以通过指定不同的参数来定制Emulator的行为,例如屏幕分辨率、内存大小等。 ### 10. 教程:创建并运行Android虚拟设备 该...

    Android 锁屏源码 手机屏保代码.rar

    2. **屏蔽系统键**: 实现屏蔽Home键、返回键和挂机键的功能,通常需要重写`Activity`的`onKeyDown()`方法,对特定的键值进行拦截处理。例如,当检测到KEYCODE_HOME、KEYCODE_BACK或KEYCODE_CALL等键时,返回`true`以...

    Android开机流程

    - **触发方式**:开机时同时按住“相机”键与“电源”键。 - **特点**:此模式下不加载内核及文件系统,主要用于工厂模式下的固件烧录。 2. **Recovery模式**: - **触发方式**:开机时同时按住“主页”键与...

Global site tag (gtag.js) - Google Analytics