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

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

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

相关推荐
郭优秀的笔记3 小时前
html鼠标悬浮提示功能
android·javascript·html
冬奇Lab4 小时前
Android 15存储子系统深度解析(一):Vold与存储管理框架
android·车载系统·系统架构
得一录4 小时前
Android 方向控制控件
android
美狐美颜SDK开放平台4 小时前
跨平台开发实战:直播美颜sdk动态贴纸在 Android / iOS / HarmonyOS 的落地方案
android·ios·harmonyos·美颜sdk·直播美颜sdk·视频美颜sdk·美颜api
2501_916008894 小时前
在不越狱前提下导出 iOS 应用文件的过程,访问应用沙盒目录,获取真实数据
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106324 小时前
Android和IOS 移动应用App图标生成与使用 Assets.car生成
android·ios·小程序·https·uni-app·iphone·webview
灵感菇_4 小时前
深入解析 Android事件分发机制
android·ui
TheNextByte14 小时前
如何在Mac上获取Android消息
android·macos
_李小白4 小时前
【Android 美颜相机】第十二天:GPUImageFilterGroup 源码解析
android·数码相机
_李小白4 小时前
【Android GLSurfaceView源码学习】第三天:GLSurfaceView的Surface、GLES与EGLSurface的关联
android·学习