android10 系统定制:增加应用锁功能

实现效果如下,上锁应用在桌面或最近任务打开弹出解锁界面,需要解锁成功才能打开应用。解锁界面可点击返回或Home键关闭,非上锁应用可直接打开。
在这里插入图片描述

基本思路:拦截系统应用启动,判断应用是否在锁住状态,弹出解锁Window。解锁完成后再正常启动应用。分为从桌面启动和最近任务启动两种情况。
1.资源的添加
在这里插入图片描述
在frameworks/base/core/res下增加了我的资源目录jia_res,添加了解锁界面用到的资源文件,文件目录如图。
需要在frameworks/base/core/res/Android.bp中添加引用:

android_app {
  ...
   resource_dirs: ["res","jia_res"],
  ...
}

另外新增的资源需要在symbols.xml或pubulic.xml声明,例如:

<resources>
  <java-symbol type="layout" name="window_unmber_unlock_app" />
  <java-symbol type="id" name="appNumberLogoImg" />
  <java-symbol type="id" name="appNumberNameText" />
  <java-symbol type="id" name="subTitleNumber" />
  <java-symbol type="id" name="pswNumberPointView" />
  <java-symbol type="id" name="errorNumberTipsText" />
  <java-symbol type="id" name="numberKeyView" />
  <java-symbol type="string" name="lock_app_number_subtitle" />
  <java-symbol type="string" name="lock_app_number_error_tip" />
  <java-symbol type="drawable" name="ic_lock_delete" />
  <java-symbol type="drawable" name="selector_keyboard_number" />
  ...
</resources>

2.拦截从桌面启动
之前分析过Activity启动流程 ,无论冷启动还是热启动都会先走ActivityStarter的startActivityMayWait方法,因此在此方法进行拦截:

private int startActivityMayWait( ...){
  ...
  // Collect information about the target of the Intent.
 ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);
        if (AppLockManager.isAppLocked(aInfo.packageName)) {
            IApplicationThread caller1 = caller;
            int callingUid1 = callingUid;
            Intent intent1 = intent;
            String resolvedType1 = resolvedType;
            AppLockManager.ShowLockWindow(mService.mContext,aInfo.packageName, new Runnable() {
                @Override
                public void run() {
                    startActivityMayWait(caller1, callingUid1,
                            callingPackage, requestRealCallingPid, requestRealCallingUid,
                            intent1, resolvedType1, voiceSession,
                            voiceInteractor, resultTo, resultWho, requestCode,
                            startFlags, profilerInfo, outResult,
                            globalConfig, options, ignoreTargetSecurity,
                            userId, inTask, reason,
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值