文档章节

android 禁用home键

徐玉强
 徐玉强
发布于 2016/10/26 13:49
字数 402
阅读 635
收藏 0

android在4.4以后已经严格控制开发者对home键的操作权限,用户从应用级别禁止home键的可能性已经不大了。在4.4之前,可以通过 onAttachedToWindow 中设置 this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); 但是在4.4以后这个属性已经被系统屏蔽了,不可再用。所以在4.4以后,应用级别只能对用户点击home键进行监听,而不能阻止。下面的方法就是监听用户点击home键的操作,并不能完成阻止。

首先,我们需要注册一个监听用户操作的广播,废话就不说了,直接上代码:

public class DoHomeWatcher {
    private Context mContext; 
    private IntentFilter mFilter; 
    private InnerRecevier mRecevier; 
    /** * 监听类的构造方法: * 初始化的时候实例化自己的实现的IntentFilter(广播接收器) */ 
    public DoHomeWatcher(Context context) { 
        mContext = context; 
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
    } 
    /** 注册广播 */ 
    public void startWatch(){ 
        if (mRecevier != null){ 
            mContext.registerReceiver(mRecevier, mFilter); 
        } 
    } 
    /** 注销广播 */ 
    public void stopWatch(){ 
        if (mRecevier != null) { 
            mContext.unregisterReceiver(mRecevier); 
        } 
    } 
    /** 广播接收器 */ 
    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) {
                    if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                        //短按home键
                    } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                    //长安home键
                    }
                }
            }
        }
    }
}

在你需要的activity中注册广播,如果需要在activity中有需要的话,可以设置回调接口进行回调

DoHomeWatcher dhw = new DoHomeWatcher(this.getApplicationContext())

dhw.startWatch();

© 著作权归作者所有

徐玉强
粉丝 1
博文 12
码字总数 13831
作品 0
杭州
技术主管
私信 提问
Android 9.0 优势探讨

我们来谈论一下 Android。尽管 Android 只是一款内核经过修改的 Linux,但经过多年的发展,Android 开发者们(或许包括正在阅读这篇文章的你)已经为这个平台的演变做出了很多值得称道的贡献...

问题终结者
2018/12/17
88
0
如何在android模拟器中卸载和安装apk程序 如何获得google mapkey 常见操作

如何在android模拟器中卸载和安装apk程序 1、安装: adb install test.apk 如果报adb不是内部命令则切换到platform-tools下面,进行安装。 2、卸载: E:workstudyandroid-sdk-windowsplatfo...

南寒之星
2013/01/23
344
0
Android Activity的生命周期详解

Activity是由Activity栈进管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。Acitivity一般意义上有四种状态: 1.当Activity位于栈顶时...

恰同学少年
2015/07/27
394
0
Activity启动模式&Task栈

在AMS中,ActivityRecord对应一个Activity,TaskRecord对应一个Task,每个TaskRecord中保存了若干ActivityRecord,TaskRecord由taskId标识,通过getTaskId()可以获取Activity所属的Task。Act...

JasmineBen
2018/05/30
0
0
Activity 一直保持在前台

想做一种防盗软件,手机接到短信为特殊指令的话就自动弹出个Activity 。 此Activity一直在前台,home键有效,按下home后Activity会自动起来。或者按下home键后点击其他应用,此activity也会起...

染指幸福
2012/08/01
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部