Android应用如何点击桌面图标开启悬浮窗后跳转到最近打开的应用

Android应用如何点击桌面图标

开启悬浮窗后跳转到上一个打开的应用

--ADB连接专 题

【点广告app】的使用方式通常为:打开"汽水音乐"、"抖音极速版"等广告APP,准备去领金币了,突然发觉没有开启【点广告app的悬浮窗】。这个时候就要先Home返回手机桌面,找到【点广告app】的桌面图标并点击它,启动了点广告的悬浮窗。然后滑拨展开任务窗口列表,找到刚刚使用的汽水音乐点击切换,继续进行领金币的大业。

闲暇的时候,我们就在想:有没有办法像"小爱助手"那样,一句话就唤醒悬浮窗,浮动在当前活动的"汽水音乐"等应用之上?这样的话就不用做那么多繁琐和复杂的操作,就能快速的进入【ocr识别并自动点击广告】的交互中。理论上讲,小爱通话能做,我们肯定也能做。我们打算下一期就去盘它。

本期我们暂时不搞那么复杂,先把上述使用方式的步骤进行简化,使用户手动点击了桌面图标之后,能自动开启点广告悬浮窗后,自动跳转到最近打开的应用,方便用户继续领金币。

体验和下载地址:

智能拨号器App: http://120.78.211.195:8060/Dialer.apk

  • 二、技术准备

首先,通常来说,一个Android应用触发事件跳转到另一个Android应用,一般手机都会弹框提示用户"是否允许"。若用户授权允许则会从包名中获取【

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

】默认主入口进行加载和显示。

这很明显不符合我们的需求,我们需要静默的操作,"悄悄的进村"。而且,它这个跳转会重新定位到新应用的主界面,我们原本浏览广告的Activity活动未必就是应用的主界面。浏览广告或新闻正爽呢,开了个悬浮窗,就重新恢复到了主界面,多冒昧啊。

因此,我们只能另辟蹊径,看看是否存在类似于【手机展示"任务窗口列表"并主动点击切换最近应用】这样的快捷操作入口。

  • 三、安卓活动列表初探

我们之前已经通过手机tcp的5555端口,与手机的adbd建立了稳定的adb客户端连接。因此,我们可以尝试执行下述命令,来获取到Android手机当前所有的活动列表:

adb shell dumpsys activity activities

命令反馈的内容和展示效果,大致如下图所示:

从这个adb命令我们很容易知道:Android基本都支持【dumpsys activity activities】,并且在响应的文本反馈中,会按照任务堆栈的先后次序,以文本字符串的方式将【

任务类型:type=standard/home

是否最顶层任务:visible=true/false

任务当前Activity:com.dragon.read/.pages.main.MainFragmentActivity

】这些信息全部展示了出来。

我们在解析【dumpsys activity activities】反馈的内容信息中,就可以直接从上到下,直接匹配和选取第一个"type=standard"且存在"visible="字符串的Task,提取其【ActivityRecord{26549485 u0 com.dragon.read/.pages.main.MainFragmentActivity t5880}】中的内容来获取最顶层任务的包名和当前Activity界面的名称。

  • 四、如何根据包名Activity名称打开应用

很简单,adb客户端命令中的【

adb shell am start -n com.dragon.read/.pages.main.MainFragmentActivity

】这个指令就是专门用来跳转到目标Activity界面的。

但是,某些应用APP的Activity会专门配置【android:exported="false"】使活动仅能应用自己操作,不允许外部途径进行访问。

此时,如继续执行上述的"am start -n xxx"指令,将会提示下述的错误:

此时,没有办法,我们只能寻找和更换另一个adb命令,如下:

【adb shell monkey -p com.ihuman.kaka -c android.intent.category.LAUNCHER 1】

这个命令只需要包名,即可正常的打开和恢复到任务的最近的Activity界面。

但"monkey -p xxx"指令有个弊端:它启动和执行的速度会比较慢,如果"am start -n xxx"指令只需600ms的话,"monkey -p xxx"指令大约需要3s-5s才能正常的切换Task应用。

  • 五、最终使用的办法

因此,我们折中一下,使用【||】命令,把这两个指令联合在一起执行。通过使用诸如

【

adb shell am start -n com.ihuman.kaka/com.ihuman.code.MainActivity || adb shell monkey -p com.ihuman.kaka -c android.intent.category.LAUNCHER 1

】

等办法,来最终实现任务又快又准确的切换。当然,由于上述指令执行后总是会反馈成功或失败的消息,我们可以简单的增加"2>/dev/null"参数,使失败的adb指令不会将执行失败的消息打印输出反馈。

最终,我们进行手机顶层APP任务切换方式的指令为:

【

exec:(am start -n %s%s 2>/dev/null) || (monkey -p %s -c android.intent.category.LAUNCHER 1 2>/dev/null)

】

至此,我们使用"dumpsys activity activities"和"am start || monkey"的组合指令,联合实现了"用户手动点击了桌面图标之后,能自动开启点广告悬浮窗后自动跳转到最近打开的应用"的效果。

  • 六、小结

本篇是纯技术文章,用于Android应用在后台静默的进行应用切换。一路走来,我们已经在Android的底层层面"静默"的做了很多的事情。所以说"手机开发者模式"还是很危险的。^V^。

本文的技术细节和实现方式,有动手能力和需求的读者,可以自行尝试和验证。

技术服务于生活,生活需要更多创意,也需要你和我们共同参与。

相关推荐
拥小抱8 小时前
Compose 知识点
android
文章永久免费只为良心8 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_86899 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港11 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA13 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
booboosui14 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng14 小时前
Android获取崩溃日志
android
aqi0014 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-9314 小时前
【Android】Android Studio 中的协程
android