Android frameworks base下拦截某个Activity启动

最近遇到一个问题:在TV 系统中预置了一个apk,每次开机都会弹出一个提示框,关于是否打开定位的对话框,查看log是启动了一个Activity,因为是 .apk 来的,所以无法修改到源码,阻止其intent到这个Activity,所以不得不从Activity的启动过程中找解决方案。

ActivityManagerService.java

AMS(ActivityManagerService)先校验一下Activity的正确性,如果正确的话,会暂存一下Activity的信息。然后,AMS会通知Launcher程序pause Activity(在AMS所在进程执行)

下面是调用流程:

  • ActivityManagerService.startActivity
  • ActivityManagerService.startActivityAsUser
  • ActivityStackSupervisor.startActivityMayWait (我是在这一步进行Activity的拦截的,因为这个方法中的参数比较明显,基本可以直接调用)
  • ActivityStackSupervisor.startActivityLocked :检查有没有在AndroidManifest中注册
  • ActivityStackSupervisor.startActivityUncheckedLocked
  • ActivityStack.startActivityLocked :判断是否需要创建一个新的任务来启动Activity。
  • ActivityStack.resumeTopActivityLocked :获取栈顶的activity,并通知Launcher应该pause掉这个Activity以便启动新的activity。
  • ActivityStack.startPausingLocked
  • ApplicationThreadProxy.schedulePauseActivity

一下是具体的几行代码,本人Android/Java水平一般般,自己修改的问题,做个手记,如果对朋友们有参考价值,倍感欣慰。

其实做法很简单,就是获取到想要拦截 PackageName 和 Activity Name,然后 return 就可以了。

解决一个问题,所用的方法并不一定有多难,有时候甚至很简单,最重要的是找准找对位置。

就如同一台机器出了问题,影响正常运转,最后查到是一颗螺丝钉坏了,换个新的就可以,难的是排查到这颗螺丝钉的过程

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值