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

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

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

相关推荐
开酒不喝车14 小时前
中间件AIDL HIDL区别总结
android·中间件
mit6.82414 小时前
Android HAL(硬件抽象层):内核到应用的完整实现
android
鹏多多15 小时前
Flutter自定义日历table_calendar完全指南+案例
android·前端·flutter
侦探观察15 小时前
南非女性旅游绑架风险分析及防范措施
android·大数据·开发语言·百度·网络安全·旅游
Digitally15 小时前
如何将文件从电脑传输到三星平板 [5种方法]
android
jie_075415 小时前
scrcpy低延迟控制 Android 设备,无需 root 权限,开源免费
android
2501_9159184115 小时前
iOS 应用如何防止破解?从逆向链路还原攻击者视角,构建完整的反破解工程实践体系
android·macos·ios·小程序·uni-app·cocoa·iphone
成都证图科技有限公司15 小时前
安卓系统Chrome内核:Android System WebView
android·前端·chrome
2501_9160074715 小时前
iOS 应用上架流程的工程化拆解 从签名体系到提交审核的全过程管控
android·ios·小程序·https·uni-app·iphone·webview