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^。

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

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

相关推荐
ji_shuke17 小时前
opencv-mobile 和 ncnn-android 环境配置
android·前端·javascript·人工智能·opencv
sunnyday042619 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理21 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台21 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐21 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极21 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan21 小时前
setHintTextColor不生效
android
洞窝技术1 天前
从0到30+:智能家居配网协议融合的实战与思考
android
QING6181 天前
SupervisorJob子协程异常处理机制 —— 新手指南
android·kotlin·android jetpack
毕设源码-朱学姐1 天前
【开题答辩全过程】以 基于安卓的停车位管理系统与设计为例,包含答辩的问题和答案
android