必威体育Betway必威体育官网
当前位置:首页 > IT技术

个人第二个项目总结:home键,recent键,back键的屏蔽

时间:2019-08-13 14:13:13来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

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>

这样,当开机后,就会执行打开你的软件并进入指定的界面

提醒:不要将这个用于制作流氓软件!做一个有良知的开发者!

相关阅读

我做产品经理这半年来的经验总结(一)

文章为作者转型产品道路上的心路历程,其中的点滴体验作者都通过文字与大家分享,希望能够给你的产品道路带来一些启发与思考。前言先

硕士研究生毕业论文书写格式总结

开始本文之前,先说明一下,本文是依据自己学校的格式要求所作的硕士论文模板,不一定是通用的。但是基本上包含了绝大部分写论文过程中

微信运动屏蔽别人后怎么调出来?

喜欢玩微信的朋友肯定都知道,微信里面有一个微信运动,开启之后,每天都可以对自己的运动步数进行记录,监控自己的运动情况,同时还能看到

供应链金融服务平台:融资方案和风控系统建立的总结

供应链金融是指金融机构(银行、非银机构)从整个产业链出发,开展综合授信,把供应链上的相关企业作为一个整体,根据交易中构成的链条关系

互联网产品运营体系总结之产品运营

有人说,产品就像生孩子,运营其实就像养孩子,很形象,但也不完全对,生孩子的人怎能不负责养孩子呢?对于互联网运营的产品来说,产品开发出来

分享到:

栏目导航

推荐阅读

热门阅读