home键
我们都知道,Android自5.0以后对一些属性有了比较大的改动,尤其是home键,在应用层已经无法做到屏蔽。今天就来看看如何屏蔽这三个键。
首先,因为不同手机的触发机制不一样,所以对于某些手机,recent键没法屏蔽,已知的有魅族,锤子(少数),鲁比亚(某些)。对于已知测试的手机,home键,back键都能屏蔽。
首先,屏蔽back比较简单,重写onKeyDown就可以了,直接上代码
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { //重写返回键方法
if (keyCode == KeyEvent.KEYCODE_BACK) {
toast.maketext(ForceActivity.this, "您点击了back键", Toast.LENGTH_SHORT).show();
return false;
}
return super.onKeyDown(keyCode, event);
}
下面就是屏蔽recent键,这种方法只对部分手机有效
@Override
protected void onpause() { //重写recent键方法
super.onPause();
for (int j = 0; j < 50; j++){
activitymanager activityManager = (ActivityManager) getAPPlicationcontext()
.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.moveTaskToFront(getTaskId(), 0);
}
}
最后,也是比较麻烦的一个,就是屏蔽home键,这里我采用的是用广播来监听,用户一旦点击了home键,就重新创建一个activity,让这个activity覆盖主界面,从而达到屏蔽home键的目的
如何实现呢?首先,创建一个java文件,命名为HomeReceiver,然后在里面实现监听,代码如下:
package com.example.wei.i_like_study;
import android.app.Pendingintent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.widget.Toast;
public class HomeReceiver extends BroadcastReceiver {
static public final String SYSTEM_DIALOG_REASON_KEY = "reason";
static public final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
static public final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
static public final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
static public final String SYSTEM_DIALOG_REASON_ASSIST = "assist";
public void onreceive(Context arg0, Intent arg1) {
String action = arg1.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { //按下Home键会发送ACTION_CLOSE_SYSTEM_DIALOGS的广播
String reason = arg1.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
Intent intent = new Intent(arg0, ForceActivity.class);
intent.setFlags(Intent.flag_activity_new_task | Intent.FLAG_ACTIVITY_SINGLE_TOP); //点击home键无延时,且不会产生新的activity
PendingIntent pendingIntent = PendingIntent.getActivity(arg0, 0,
intent, 0);
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printstacktrace();
}
}
}
}
}
}
然后需要在mainfest中注册
</receiver>
<receiver android:name=".HomeReceiver" android:exported="true" android:enabled="true"/>
最后,在你的代码中进行动态注册
innerReceiver = new HomeReceiver(); //注册广播
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerreceiver(innerReceiver, intentFilter);
结束时,应该取消监听
unregisterReceiver(innerReceiver); //取消注册
innerReceiver); //取消注册
好了,就这样,back,recent,home三个键就可以被屏蔽了。
最后,再提一提开机自启动项目。要实现这个,首先同样要监听开机事件。我们在这里新建一个java文件,AutoStartReceiver
然后,对开机后发送的广播进行监听,代码如下:
package com.example.wei.i_like_study;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AutoStartReceiver extends BroadcastReceiver {
private static final String ACTION = "android.intent.action.BOOT_COMPLETED"; //开机后,系统发送的广播
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION.equals(intent.getAction())||Intent.ACTION_MEDIA_mountED.equals(intent.getAction())){
Intent it = new Intent(context.getApplicationContext(),ForceActivity.class);
it.setAction("android.intent.action.MAIN");
it.addCategory("android.intent.category.LAUNCHER");
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//context.startActivity(it);
PendingIntent pendingIntent = PendingIntent.getActivity(context.getApplicationContext(), 0,
it, 0);
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
}
}
同样,也需要再mainfest中进行静态注册
<receiver android:name=".AutoStartReceiver" android:exported="true" android:enabled="true">
-<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
这样,当开机后,就会执行打开你的软件并进入指定的界面
提醒:不要将这个用于制作流氓软件!做一个有良知的开发者!
相关阅读
文章为作者转型产品道路上的心路历程,其中的点滴体验作者都通过文字与大家分享,希望能够给你的产品道路带来一些启发与思考。前言先
开始本文之前,先说明一下,本文是依据自己学校的格式要求所作的硕士论文模板,不一定是通用的。但是基本上包含了绝大部分写论文过程中
喜欢玩微信的朋友肯定都知道,微信里面有一个微信运动,开启之后,每天都可以对自己的运动步数进行记录,监控自己的运动情况,同时还能看到
供应链金融是指金融机构(银行、非银机构)从整个产业链出发,开展综合授信,把供应链上的相关企业作为一个整体,根据交易中构成的链条关系
有人说,产品就像生孩子,运营其实就像养孩子,很形象,但也不完全对,生孩子的人怎能不负责养孩子呢?对于互联网运营的产品来说,产品开发出来