应用锁实现介绍 支持5.0

来源:互联网 发布:淘宝确定开店协议 编辑:程序博客网 时间:2024/06/06 09:12

现在通用的应用锁实现 都是启动一个service一直在后台,判断启动的应用在我们的锁内,就启动我们的锁屏界面。


public class HookService extends Service {    public final static String TAG = "TestService";    private ActivityManager mActivityManager;    private String mLastPackageName = "";    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onCreate() {        super.onCreate();        mActivityManager = (ActivityManager) getSystemService("activity");        checkWindow();    }    Handler mHandlertoast = new Handler() {        @Override        public void handleMessage(Message msg) {            LockHelper.getInstance().unLock(HookService.this, null, mLastPackageName);        }    };    private void checkWindow() {        new Thread() {            @Override            public void run() {                while (true) {                    fun();                    try {                        Thread.sleep(100);                    } catch (InterruptedException e) {                    }                }            }        }.start();    }    private void fun() {        String[] activePackages;        if (Build.VERSION.SDK_INT > 20) {            activePackages = getActivePackages();        } else {            activePackages = getActivePackagesCompat();        }        if (activePackages != null) {            for (String activePackage : activePackages) {                if (activePackage.equals("com.myth.cici")) {                    if (!activePackage.equals(mLastPackageName)) {                        mLastPackageName = activePackage;                        mHandlertoast.sendEmptyMessage(0);                    }                }            }        }    }    String[] getActivePackagesCompat() {        final List<ActivityManager.RunningTaskInfo> taskInfo = mActivityManager                .getRunningTasks(1);        final ComponentName componentName = taskInfo.get(0).topActivity;        final String[] activePackages = new String[1];        activePackages[0] = componentName.getPackageName();        return activePackages;    }    private String[] getActivePackages() {        final Set<String> activePackages = new HashSet<String>();        final List<ActivityManager.RunningAppProcessInfo> processInfos = mActivityManager                .getRunningAppProcesses();        for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {                activePackages.addAll(Arrays.asList(processInfo.pkgList));            }        }        return activePackages.toArray(new String[activePackages.size()]);    }}

5.0以上使用getActivePackages();以下则使用getRunningAppProcesses。

判断获取到的活动的应用包名和我们锁住的包名是否一致,一致则还要判断是否是上次已经解锁了的,防止一直解锁,然后就启动我们的锁屏界面了。

这只是个基本的部分,正式的还需要解决很多问题。比如Service被杀死了怎么办等。



0 0
原创粉丝点击