Andorid4.x 流氓式屏蔽HOME键
转载请列明出处 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键的更多相关文章
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back).菜单键(Menu) ...
- MFC非模态对话框中屏蔽ESC键
个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...
- 怎么屏蔽F5键刷新功能
window.document.onkeydown=function(){if(event.keyCode==116){//屏蔽F5键,改为只刷新本页面,防止一刷就刷整个窗口event.keyCode ...
- Android开发_关于如何屏蔽Home键
今天在遇到一个要屏蔽Home键的问题,研究一上午终于解决,方法记录于下: 在Android2.3版本以下重写以下方法就能屏蔽Home键: public void onAttachedToWindow( ...
- android屏蔽home键的实现
Android中,网上很多屏蔽Home键都智能在4.0以下运行,在4.0以及以上运行直接崩溃. 需要这样更改(来源:http://androidmaster.iteye.com/): @Overrid ...
- EntityFramework Core并发导致显式插入主键问题
前言 之前讨论过EntityFramework Core中并发问题,按照官网所给并发冲突解决方案以为没有什么问题,但是在做单元测试时发现too young,too simple,下面我们一起来看看. ...
- Android 屏蔽Power键 Home键
Android 屏蔽Power键 Home键 标签: androidpower键Home键PhoneWindowManagerframework 2014-04-18 17:22 1557人阅读 评论 ...
- 【JS】【1】JavaScript屏蔽Backspace键(避免点击后页面产生回退)
前言: 1,参考资料:JavaScript屏蔽Backspace键 - 孤傲苍狼 - 博客园(http://www.cnblogs.com/xdp-gacl/p/3785806.html) 2,参考的 ...
- Flutter Dialog 屏蔽返回键
使用 WillPopScope + Future.value(false); 屏蔽返回键.代码如下: showDialog<Null>( context: context, // Buil ...
随机推荐
- C++类的复制构造函数和赋值运算符
前言: C++面向对象的编程过程中,凡是在类中运用到动态内存分配的时候总是会写一个显示的复制构造函数和赋值重载运算符,本文将结合C++ Primer Plus一书的内容分析下原因: 一.在C++编程中 ...
- CentOS6.5安装配置Samba
CentOS6.5安装配置Samba 本文的场景是虚拟机运行CentOS6.,本机是Win7,现欲把CentOS上的一个文件夹共享出来,Win的机器可以读写. Samba与window连接需要使用Ne ...
- poj 1328 Radar Installation(贪心)
题目:http://poj.org/problem?id=1328 题意:建立一个平面坐标,x轴上方是海洋,x轴下方是陆地.在海上有n个小岛,每个小岛看做一个点.然后在x轴上有雷达,雷达能覆盖的范 ...
- bzoj1588,1208,1503
进入splay tree的学习中: 据说splay tree在理论上功能十分强大,好好学: splay首先一定是一棵BST,所以记不得的时候画个图就明白: 首先总结一下splay基本的操作左旋,右旋: ...
- jquery提示气泡
<link href="css/manhua_hoverTips.css" type="text/css" rel="stylesheet&qu ...
- [POJ 2891] Strange Way to Express Integers
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 10907 ...
- Welcome to Linux From Scratch!
/**************************************************************************** * Welcome to Linux Fro ...
- adaboost学习资料收集
很通俗易懂的一篇博文 http://blog.csdn.net/haidao2009/article/details/7514787 百度搜索研发部的一篇文章 http://stblog.baidu- ...
- NOIP2007 字符串展开
.字符串的展开 (expand.pas/c/cpp) [问题描述] 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子 ...
- Codeforces 603A Alternative Thinking
题意:给你一个01串,必须替换一次,且替换的为子串.问换完后,最大01串长度. #include <bits/stdc++.h> typedef long long ll; using n ...