Android6.0获取前台进程名称的方法

在Android 6.0上,由于安全限制,获取前台进程名称变得困难。本文介绍了通过执行Linux命令和读取系统文件的方式来获取,包括尝试使用`dumpsys meminfo`、`UsageStatsManager`、读取`/proc`目录下的文件等方法。最终,通过结合`cat`命令成功获取了前台进程名称,但无法确定top activity。
摘要由CSDN通过智能技术生成

今天遇到个问题, 使用action为“Android.media.action.IMAGE_CAPTURE“打不开Android6.0系统的小米4手机照相机, 问题是你不知道到底是否启动了相机。 我试了很多种方法, 最终只想到一个土办法:点击拍照按钮后延迟1秒判断是否执行了onStop函数或自己是否前台进程,方法很low也可能误判。(PS:从自己app打开照相机后会执行onPause-onStop函数)但在尝试的过程中学到不少东西, 可以分享一下:

        目前没找到6.0版本获取top activity的方法, google把我能想到的路都封死了。 因为这是个漏洞,假设钓鱼app监听打开支付宝、微信输入密码的activity时,覆盖一模一样的界面就可以盗取你的机密信息了。  

        

1、 Android5.0以下的方法在5.0及后续版本不再有效。

[java]  view plain   copy
  1. List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);  
  2. if (tasks != null && !tasks.isEmpty()) {  
  3.     ComponentName componentName = tasks.get(0).topActivity;  
  4.     if (componentName != null) {  
  5.         return componentName.getClassName();  
  6.     }  
  7. }  

2、尝试ActivityManager的getRunningAppProcesses 方法,但从Andriod5.1版本后只能拿到自己的进程信息, 所以此路不通;


3、使用UsageStatsManager类验证, 但它需要系统权限, 实际使用场景下很难被授权, 此路不通;


4、思路:在android Runtime运行dumpsys meminfo , 拿到输出并截取前台进程, 但是拿不到top activity, 可以做个测试手段。

在cmd窗口执行adb shell dumpsys meminfo 后输出所有运行进程的信息,能明显的看出那个是前台进程。 但在Android运行时报无DUMP权限, 这是系统签名才能执行的操作。

   373663 kB:       0 kB: Foreground
              265450 kB:       0 kB: com.android.browser (pid 9131 / activities)
               30164 kB:       0 kB: com.miui.securitycenter.remote (pid 3191)

               28803 kB:       0 kB: com.miui.networkassistant.deamon (pid 3125)


[java]  view plain   copy
  1. do_exec("dumpsys meminfo ");   
  2.  String do_exec(String cmd) {  
  3.        String s = "/n";  
  4.        try {  
  5.            Process p = Runtime.getRuntime().exec(cmd);  
  6.            BufferedReader in = new BufferedReader(  
  7.                    new InputStreamReader(p.getInputStream()));  
  8.            String line = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值