Android中监听"电源键长按"、"Home键"、"Home键长按"

Android中监听"电源键长按"、"Home键"、"Home键长按"

 

这几个“按钮”的触发,都会产生一个Action ==Intent.ACTION_CLOSE_SYSTEM_DIALOGS的通知

区分他们三个的不同事件的参数,就是随着Intent带过来的reason字符串,分别对应

"电源键长按"(globalscreen)、"Home键"(homekey)、"Home键长按"(recentapps)

说破了就这么简单,直接上代码了。

 

package com.jumpinus.test;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class MainActivity extends Activity {
	
	private MyBroadCastReceiver myBroadCastReceiver;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		
		myBroadCastReceiver = new MyBroadCastReceiver();
		
	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		IntentFilter intentFilter = new IntentFilter();
		intentFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
		
		System.out.println("I'm coming, myBroadCastReceiver注册了!");
		registerReceiver(myBroadCastReceiver, intentFilter);
	}
	private class MyBroadCastReceiver extends BroadcastReceiver{

		@Override
		public void onReceive(Context context, Intent intent) {
			//你自己先把 reasons == homekey 和 长按homekey 排除,剩下的做下面的处理
			String reason = intent.getStringExtra("reason");
			if (intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
				System.out.println("Intent.ACTION_CLOSE_SYSTEM_DIALOGS : " + intent.getStringExtra("reason"));
				
				if (intent.getExtras()!=null && intent.getExtras().getBoolean("myReason")){
					myBroadCastReceiver.abortBroadcast();
				}else if (reason != null){
					
					if (reason.equalsIgnoreCase("globalactions")){
						
						//监听电源长按键的方法:
						Intent myIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
						myIntent.putExtra("myReason", true);
						context.sendOrderedBroadcast(myIntent, null);
						System.out.println("电源  键被长按");
						
					}else if (reason.equalsIgnoreCase("homekey")){
						
						//监听Home键的方法
						//在这里做一些你自己想要的操作,比如重新打开自己的锁屏程序界面,这样子就不会消失了
						System.out.println("Home 键被触发");
						
					}else if (reason.equalsIgnoreCase("recentapps")){
						
						//监听Home键长按的方法
						System.out.println("Home 键被长按");
					}
				}
			}
		}
		
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		
		System.out.println("I get out, myBroadCastReceiver注销了!");
		unregisterReceiver(myBroadCastReceiver);
	}
}
监听Home键的方法
						//在这里做一些你自己想要的操作,比如重新打开自己的锁屏程序界面,这样子就不会消失了
						System.out.println("Home 键被触发");
						
					}else if (reason.equalsIgnoreCase("recentapps")){
						
						//监听Home键长按的方法
						System.out.println("Home 键被长按");
					}
				}
			}
		}
		
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		
		System.out.println("I get out, myBroadCastReceiver注销了!");
		unregisterReceiver(myBroadCastReceiver);
	}
}

 

 

 

 

效果图:

 

Android电源键长按事件可以通过监听Intent.ACTION_CLOSE_SYSTEM_DIALOGS的通知来触发。具体来说,当用户长按电源时,系统会发送一个带有reason参数的广播通知,其reason参数的值为"globalscreen",用于区分电源键长按事件。\[1\] 在Android的框架,PhoneWindowManager类负责处理电源Home的事件。我们可以通过修改PhoneWindowManager类的源码来处理长按电源的一系列事件。该类的源码路径为frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java。\[2\] 此外,Android还有一个GlobalActions类,其定义了一系列操作的Action接口,包括关机、重启、截屏等功能。我们可以通过继承Action接口的子类来实现自定义的操作。例如,可以通过实现一个RebootAction类来处理重启操作,该类需要继承SinglePressAction和LongPressAction接口,并重写相应的方法来实现长按事件的处理逻辑。\[3\] #### 引用[.reference_title] - *1* [Android监听"电源键长按"、"Home"、"Home键长按](https://blog.csdn.net/weixin_33555586/article/details/117596786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [分析Android长按电源事件并定制长按电源dialog](https://blog.csdn.net/unclePomelo/article/details/78375350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值