转载请列明出处 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. Poj2948Martian Mining(记忆化)

    链接 这题意好难懂 看得迷迷糊糊 想的也迷迷糊糊  后来睡了会突然想到了..不就是类似以前的矩阵操作 从右下角记忆化   大的由小的推来 dp[i][j] = max(dp[i-1][j]+s1,dp ...

  2. 设计模式 - chain of Responsibility

    Chain of Responsibility也就是职责链模式,通过使用链式结构,使对象都有机会处理请求,从而避免请求的发送者与接受者间的耦合关系.将这些对象连成链,并沿着该链传递请求,直到有对象处理 ...

  3. UVa 1395 (最小生成树) Slim Span

    题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...

  4. [swustoj 371] 回文数

    回文数(0371) 问题描述 一个自然数如果把所有数字倒过来以后和原来的一样,那么我们称它为回文数.例如151和753357.我们可以把所有回文数从小到大排成一排:1, 2, 3, 4, 5, 6, ...

  5. HDU 1532 Drainage Ditches 排水渠(最大流,入门)

    题意: 给出一个有向图,以及边上的容量上限,求最大流.(有重边,要将容量上限叠加) 思路: 用最简单的EK+BFS解决.每次搜到一条到达终点的路径,就立刻退出,更新ans,然后再回头修改图中的当前fl ...

  6. GitHub进一步了解

    为什么要引入Git: 1)用简单一点的例子来讲: 一个公司有几个甚至十几个人共同合作开发一款项目的时候,公司对项目代码有明确规范,不可能再像学校做的小项目一样,你觉得哪个同学的代码写的不好,或者和你的 ...

  7. AngularJS 拦截器和好棒例子

    目录[-] 什么是拦截器? 异步操作 例子 Session 注入(请求拦截器) 时间戳(请求和响应拦截器) 请求恢复 (请求异常拦截) Session 恢复 (响应异常拦截器) 总结 Intercep ...

  8. LINQ,EF联合查询join

    public object GetListAdmin() { //return db_C56.Admins //   .Where(a => a.Status != "D") ...

  9. 《深入Java虚拟机学习笔记》- 第4章 网络移动性

    Java虚拟机学习笔记(四)网络移动性

  10. JRebel 5.3.2

    http://www.blogjava.net/xylz/archive/2013/09/15/404098.html   此为单文件版本,无需license文件 IDE(Eclipse.IDEA可能 ...