Android中屏蔽 电源键长按、Home键、Home长按
2016-01-19 15:30
585 查看
转载至:http://blog.csdn.net/gao_chun/article/details/45153273
Android中屏蔽电源键长按、Home键、Home长按
这几个“按键”的触发,都会产生一个 Action
== Intent.ACTION_CLOSE_SYSTEM_DIALOGS 的通知区分他们三个的不同事件的参数,就是随着 Intent 带过来的 reason 字符串,分别对应:
"电源键长按"(globalscreen)
"Home键"(homekey)
"Home长按"(recentapps)
我们可以使用广播来实现,如:
[java] view
plaincopyprint?
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);
}
}
Android中屏蔽电源键长按、Home键、Home长按
这几个“按键”的触发,都会产生一个 Action
== Intent.ACTION_CLOSE_SYSTEM_DIALOGS 的通知区分他们三个的不同事件的参数,就是随着 Intent 带过来的 reason 字符串,分别对应:
"电源键长按"(globalscreen)
"Home键"(homekey)
"Home长按"(recentapps)
我们可以使用广播来实现,如:
[java] view
plaincopyprint?
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);
}
}
相关文章推荐
- Android 小米安装apk遇到的问题
- Android不错的图片压缩方法
- Android中对图片的内存优化方法
- Android 自定义日期控件 (仿QQ,IOS7)
- android播放gif图片动画
- Android Drawable资源总结篇
- Android开源项目第一篇——个性化控件(View)篇
- Android 开发百度地图之二定位
- Android开发学习笔记:手机震动控制浅析
- 史上最详细的Android Studio系列教程(二)--基本设置与运行
- android 的Menu菜单
- Android Studio之Gradle多渠道打包
- 常用Android开发组件之图像类组件
- Gradle常用命令使你更敏捷的使用androidstudio
- 开源分享三(炫酷的Android Loading动画)
- Android Studio 设置内存大小及原理
- Android中ButterKnife框架
- Android绘制流程
- 关于百度推送点击通知,跳转的问题(Android)
- android之AsyncTask真正解析