现在的位置: 首页 > 综合 > 正文

【Android开发技巧】 – 如何获取应用Shortcut在Launcher坐标信息

2013年10月15日 ⁄ 综合 ⁄ 共 1077字 ⁄ 字号 评论关闭

本文章由Jack_Jia编写,转载请注明出处。  
文章链接:
http://blog.csdn.net/jiazhijun/article/details/8878941

作者:Jack_Jia    邮箱: 309zhijun@163.com

      一、序言

             目前市面上好多的工具类软件都实现了一个很有意思的交互方式,当用户点击Launcher上应用快捷方式icon时,在Icon的位置上方启动一个小的窗口来显示应用处理过程,这种交互的好处是用户不需要离开Launcher即可完成相应操作。但是应用是如何得到快捷方式Icon在Launcher中坐标信息的呢?

             今天我们就通过逆向分析360优化大师来看看获取icon坐标信息的实现细节。

     二、分析过程

            360优化大师一键清理交互方式如下图所示:

            当用户点击Launcher中“一键清理”时,界面显示悬浮窗口并显示清理的过程动画和清理结果。该悬浮窗口显示位置能够根据Icon位置的变化而变化。

                                                   

当点击一键清理icon时,系统发生了什么事情呢?

我们通过adb shell logcat查看日志信息,可以清晰的看到当点击事件发生时,系统发生了什么。

通过log信息,我们可以看到,当点击一键清理icon时,系统启动了.shortcut.clear.CleanActivity组件。请注意启动参数 bnds=[[125,392][235,510]] 

接下来查看.shortcut.clear.CleanActivity组件代码:

.shortcut.clear.CleanActivity组件并没有做太多的事情,并调用了Intent.getSourceBounds()方法,并将方法结果传递给了CleanViewServiceEx服务。

Intent.getSourceBounds()方法似乎就是一键清理icon的坐标信息。

接下来继续查看CleanViewServiceEx服务组件代码:

CleanViewServiceEx组件计算出了悬浮窗口在屏幕中的显示区域,并在该区域显示视图。


其实通过查看Android系统源代码Launcher.java 我们就可以获取真相,当shortcut被点击时,Launcher会通过setSourceBounds方法设置图标的坐标信息并通过Intent发送出去:




 三、结论


       通过Intent.getSourceBounds()方法可以获取到Shortcut在Launcher中的坐标信息。

抱歉!评论已关闭.