转载请列明出处 http://blog.csdn.net/steelychen/article/details/37757341

应用项目须要要屏蔽HOME键。

项目本身的要求是让按下HOME键后程序不做不论什么响应,就像按下返回键一样在onBackPressed 方法中直接return啥都不做。

紧跟着去google,百度翻了个遍也没有找到解决办法。最坑爹的是一些无良的网友在没有自己亲自測试的情况下转发很多不靠谱的解决方案。浪费了大家好多时间。并且自己刚接触Android两三个月也不太了解不同的版本号之前权限是不一样的。

前言也算说得多了,屏蔽HOME键确实是做不到的,但我想到了第二种方式,就是让自己的Activity不会被退出,所以标题才加了“流氓式”。哈哈。

到底怎样做?相信这个是大家最关心的。事实上在按下HOME键的时候当前Activity的onStop方法会被调用,能够在onStop方法中让后台的Service再把自己给又一次接起来。

先上一张图然后再详解

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3RlZWx5Y2hlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

这里涉及四个类(涉及安卓专业术语可能会表达有误。靠大家智慧理解)

MainActivity  主程序的桌面

MonitorService 后台执行的Service

MyBinder 用于Activity 和Service 联系的Binder

ActivityChecker 用于检查Activity 是不是在最前端的自己定义线程类

接下来上相关类的关键代码

MainActivity.java

	@Override
protected void onStop() {
// ams 是一个 MyBinder 对象 
ams.startIntent();
super.onStop();
}

MonitorService.java (MyBinder 和 ActivityChecker 也包括在这个java文件里)

package com.example.xxx;

import com.example.xxx.MainActivity;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log; public class MonitorService extends Service { private String tag = MonitorService.class.getSimpleName();
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
} @Override
public void onDestroy() {
super.onDestroy();
} public void startMain() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} class ActivityChecker extends Thread{
@Override
public void run(){
Log.d(tag, "start check");
while(true){
ActivityManager am = (ActivityManager)MonitorService.this.getSystemService(Activity.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
String toActivityName = cn.getClassName();
if (!toActivityName.equals(MainActivity.class.getName())){
startMain();
}else{
Log.d(tag, "check finished");
break;
}
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} class MyBinder extends Binder implements ActivityMonitorService {
@Override
public void startIntent() {
new ActivityChecker().start();
}
} }

这样就能够达到按下Home键后Activity再次被拉起来的展示的效果了。

所有就这些,已经在项目执行着。大家不防试试看。

Andorid4.x 流氓式屏蔽HOME键的更多相关文章

  1. Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键

    在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back).菜单键(Menu) ...

  2. MFC非模态对话框中屏蔽ESC键

    个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...

  3. 怎么屏蔽F5键刷新功能

    window.document.onkeydown=function(){if(event.keyCode==116){//屏蔽F5键,改为只刷新本页面,防止一刷就刷整个窗口event.keyCode ...

  4. Android开发_关于如何屏蔽Home键

    今天在遇到一个要屏蔽Home键的问题,研究一上午终于解决,方法记录于下: 在Android2.3版本以下重写以下方法就能屏蔽Home键: public void onAttachedToWindow( ...

  5. android屏蔽home键的实现

    Android中,网上很多屏蔽Home键都智能在4.0以下运行,在4.0以及以上运行直接崩溃. 需要这样更改(来源:http://androidmaster.iteye.com/): @Overrid ...

  6. EntityFramework Core并发导致显式插入主键问题

    前言 之前讨论过EntityFramework Core中并发问题,按照官网所给并发冲突解决方案以为没有什么问题,但是在做单元测试时发现too young,too simple,下面我们一起来看看. ...

  7. Android 屏蔽Power键 Home键

    Android 屏蔽Power键 Home键 标签: androidpower键Home键PhoneWindowManagerframework 2014-04-18 17:22 1557人阅读 评论 ...

  8. 【JS】【1】JavaScript屏蔽Backspace键(避免点击后页面产生回退)

    前言: 1,参考资料:JavaScript屏蔽Backspace键 - 孤傲苍狼 - 博客园(http://www.cnblogs.com/xdp-gacl/p/3785806.html) 2,参考的 ...

  9. Flutter Dialog 屏蔽返回键

    使用 WillPopScope + Future.value(false); 屏蔽返回键.代码如下: showDialog<Null>( context: context, // Buil ...

随机推荐

  1. (转载) ExtJs大比拼JQuery:Dom文档操作

    此次不生产水,做一次搬运工. http://www.cnblogs.com/lipan/archive/2011/12/07/2269815.html

  2. 读取Excel任务列表并显示在Outlook日历上

    前几天,公司发了一个任务安排,时间不固定,但要求准时到,为了给自己加一个提醒,也为了回顾一下以前的技术,特做了一个Demo. 读取Excel就不多说了,代码很简单,但支持老版本Excel和的版本Exc ...

  3. BZOJ_1022_[SHOI2008]_小约翰的游戏John_(博弈论_反Nim游戏)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1022 反Nim游戏裸题.详见论文<组合游戏略述——浅谈SG游戏的若干拓展及变形>. ...

  4. python扩展实现方法--python与c混和编程

    前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObj ...

  5. 利用IE/FF的不同识别CSS来使用浏览器兼容问题

    区别IE6与FF: background:orange;*background:blue; 区别IE6与IE7: background:green !important;background:blue ...

  6. 房租管理小软件(七):flowlayoutPancel 中增加分类控

    见下图的 string FNodeName = dt.Rows[i]["FNodeName"].ToString(); ) { RoomControl.Thumbnail.Grou ...

  7. java Object类学习

    /* * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...

  8. 2016"百度之星" - 初赛(Astar Round2B) 1006 中位数计数

    思路:统计当前数左边比它小|大 i个人,相应右边就应该是比它大|小i个人 l数组表示左边i个人的方案 r表示右边i个人的方案 数组下标不可能是负数所以要加n //#pragma comment(lin ...

  9. java中String类小结

    构建一个字符串 1.用字符串直接量: String message = new String("Welcome to java"); 2.用字符串直接量: String messa ...

  10. leetcode@ [208] Implement Trie (Prefix Tree)

    Trie 树模板 https://leetcode.com/problems/implement-trie-prefix-tree/ class TrieNode { public: char var ...