- 时间:2020-04-08 07:16 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:Android悬浮球及全局返回功能的实现示例
[b]先来一发效果图:[/b]
前面是返回效果,最后一下是实现home键的效果
[img]http://files.jb51.net/file_images/article/201704/2017042110073410.gif[/img]
[b]前言[/b]
很久之前,就想做一个悬浮球了,毕竟是程序猿嘛,有想要的功能的时候总是想自己尝试一下,于是兴致勃勃的找了好久,都没有找到全局返回功能该如何实现!最后也无疾而终,就在前两天,又想到了这个功能,今天硬是花了好久,从一个同类软件获得了一点灵感,有一个关键的地方被我察觉到了,顺着这个思路找了很多资料,便实现了全局返回功能。
[b]思路[/b]
废话不多说了,说说主要的思路吧,关键的一个类就是:[code]AccessibilityService[/code],[url=https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityService.html]官方文档地址[/url],这个类与手机里面的一个功能密切相关:辅助功能-服务。官方文档来看,这个功能是为了方便有障碍的人士更好的使用手机。我们这里就不展开介绍里面的API了,为了实现我们的全局返回功能,我们只需要使用一个函数即可:[code]boolean performGlobalAction (int action),[/code]官方解释如下:
Performs a global action. Such an action can be performed at any moment regardless of the current application or user location in that application. For example going back, going home, opening recents, etc.
翻译过来就是:
执行全局动作。无论该应用程序中的当前应用程序或用户位置如何,都可以随时执行此类操作。例如执行HOME键,BACK键,任务键等
其中可以传入的参数有四个:
[list=1]
[*]GLOBAL_ACTION_BACK[/*]
[*]GLOBAL_ACTION_HOME[/*]
[*]GLOBAL_ACTION_NOTIFICATIONS[/*]
[*]GLOBAL_ACTION_RECENTS[/*]
[/list]
从字面就可以理解,我们返回功能需要的就是GLOBAL_ACTION_BACK。所以我们只需要开启服务,调用函数就可以实现全局返回功能了。
[b]编写代码[/b]
[b]最重要的服务类[/b]
我们要新建一个类去继承自上面那个类:
public class MyAccessibilityService extends AccessibilityService {
public static final int BACK = 1;
public static final int HOME = 2;
private static final String TAG = "ICE";
@Override
public void onCreate() {
super.onCreate();
//使用EventBus代替广播
EventBus.getDefault().register(this);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) { }
@Override
public void onInterrupt() {}
@Subscribe
public void onReceive(Integer action){
switch (action){
case BACK:
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
break;
case HOME:
performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
break;
}
}
}
上面的[code]onReceive[/code]方法是我们使用EventBus的订阅函数,当其他地方发送消息之后,我们这里就可以收到,然后判断是要执行后退还是回到桌面。
然后我们在AndroiManifest里面要注册我们的服务,但是这个注册的比较特殊:
首先加入权限声明:
[url=https://github.com/CHNicelee/FloatingBall]https://github.com/CHNicelee/FloatingBall[/url]
demo下载地址:[url=http://xiazai.jb51.net/201704/yuanma/FloatingBall_jb51.rar]FloatingBall_jb51.rar[/url]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。