前言 你会发现QQ视频的时候,就算手机回到主页,视频小模块依旧能悬浮在桌面上。还有当年很火的各种手机杀毒软件的桌面小助手,总能在呆在桌面。这种悬浮窗的操作就需要用到Window。 层级高的Window会覆盖层级低的Window,跟Android5.0引入的Z轴类似。 权限 Android6.0以上,如果要用系统Window,我们需要申请悬浮窗权限。 Manifests: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" / 判断是否有悬浮窗权限: Settings.canDrawOverlays Demo 利用ActivityLifecycleCallbacks实现了前后台的监听,切换到后台时隐藏了悬浮窗。 源码下载:Android利用WindowManager实现悬浮窗 以上就是本文的全部内容,希望对大家的学习有所帮助。
另一个是360卫士的悬浮球,实现此功能的方式比较多,这里以视频通话悬浮窗中的需求为例。 退出通话页面悬浮窗消失。 业务场景技术分析 在编码之前,我们必须将流程整理好,这样更有利于编码的实现。实现一个功能如果需要10分钟,思考的时间是7分钟,编码占用的时间只是三分钟。 2.通话页面隐藏时悬浮窗显示,通话页面显示时悬浮窗隐藏,可以看出悬浮窗和Activity的生命周期相关联,所以悬浮窗的Service和通话页面的Activity是通过bind去绑定的。 结合上述技术问题分析,我们倒叙一一通过编码实现 悬浮窗实现方案 实现效果 ? 准备工作 首先我们新建一个项目,项目中有两个Activity,我们在第二个Activity编写通话模拟页面。 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> (很多文章标题都是悬浮窗如何绕过权限,什么设置类型为TOAST
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
作者:Kuky_xs 博客:https://www.jianshu.com/p/1d22edea2647 最近公司的项目里,需要通过悬浮窗进行控制,悬浮窗根据手势进行拖动。 ,接着在手指在 indicatorView 按下的时候,添加一个空的 RelativeLayout,作为悬浮窗的 rootview,然后往 rootview 添加悬浮窗内容 contentView,通过 在实现逻辑之前,因为整体都在悬浮窗上实现,需要定义悬浮窗内容的一些必要属性,因为 indicatorView 和 rootView 的属性差不多,所以只列出 indicatorView 的属性列表,具体的可以看 等到悬浮窗完全展示的时候,点击空白的地方,悬浮窗又需要从当前的位置回滚到初始的位置,其原理和拖出来的原理是一样的。 通过如上代码可以发现,contentView 的 layout 属性变化都是通过动画来实现的,这边我采用属性动画,来不断改变滑动的距离来实现悬浮窗显示和隐藏的效果,也就是就是上面代码中的 rightInSmoothToLeft
悬浮窗是在系统上显示的内容,好像微信视频聊天时的小窗口一样,在退出软件后依然存在的一个窗口,本博客以窗口中放一个button组件为例,简单展示悬浮窗,其中包括了对Android 6.0以下、Android 6.0到Android 8.0、Android 8.0以上版本的处理,下面开始介绍实现方法: 1、MainActivity中的代码 public Button mFloatingButton; v.getId()){ case R.id.floating_btn : startFloatingButtonService(v); break; } } 思路简单解释:点击弹出悬浮窗按钮时 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com 源码下载地址:Android悬浮窗 源码下载 以上就是本文的全部内容,希望对大家的学习有所帮助。
目的 我们在很多android应用中可能会看到悬浮窗按钮,最多的应该就是360了,通过代码我们也可以实现这个功能 先上干货 Demo做完的效果演示视频: ? (context); } }); } } ---- MyWindowManager 这个类是我们管理大小悬浮框的事件类,包括关闭小悬浮窗,展开大悬浮窗等 我们把大小悬浮穿的参数分别对应不同的LayoutParams,都在这里处理 ---- FloatWindow 做一个floatWindow继承自Service 通过Handler和Time控件来刷新悬浮窗是否一直存在 ,则创建悬浮窗。 ,则移除悬浮窗。
那么今天我们就来实现一下Android悬浮窗,以及探索一下实现悬浮窗时的易错点。 1. 实现原理 1.1 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去。 Android的界面绘制,都是通过WindowMananger的服务来实现的。 具体实现 下面来讲解一下悬浮窗的具体实现方式。 对,没看错,最简单的悬浮窗这就实现了。是不是很简单?来看看效果吧。 ? 当然了,这个悬浮窗的效果仅仅是显示出来,离真正想要的效果还相差甚远。 总结 以上就是Android悬浮窗的实现方式,以及一些小小的简单应用。 可以总结为以下几个步骤: 1. 声明及申请权限 2. 构建悬浮窗需要的控件 3.
本文实例为大家分享了Android实现触摸移动的悬浮窗的具体代码,供大家参考,具体内容如下 1.触摸移动的悬浮窗的快速实现 UI ? 2. 悬浮窗实现 2.1 悬浮窗权限 为了偷懒,我SDK选择比较低的17,如果不配置权限,则应用会运行报错 正规流程,查询是否有悬浮窗权限,如果没有需要提示,并跳转到悬浮窗设置界面“即是否允许运行在其他应用上面 :name="android.permission.SYSTEM_ALERT_WINDOW" / 2.2 悬浮窗配置初始化 这里主要关注 mParams.type 和 mParams.flags 这两个参数是核心 WindowManager.LayoutParams.WRAP_CONTENT; mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // 实现悬浮窗可以移动的属性 WindowManager.LayoutParams.WRAP_CONTENT; mParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; // 实现悬浮窗可以移动的属性
最近开发项目中,有个在屏幕上任意拖动的悬浮窗功能,其实就是利用 WindowManager的api来完成这个需求,具体的实现的功能如下: 1.自定义view import android.content.Context () - mOffsetToParentY); mWindowManager.updateViewLayout(RecordScreenView.this, mLayoutParams);//不断刷新悬浮窗的位置 savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT = 23) { //设置中请求开启悬浮窗权限 :name="android.permission.SYSTEM_ALERT_WINDOW"/ //悬浮窗权限 <application android:allowBackup="true" android 总结 到此这篇关于Android 实现可任意拖动的悬浮窗功能(类似悬浮球)的文章就介绍到这了,更多相关Android任意拖动的悬浮窗内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持
1、悬浮窗的基本介绍 悬浮窗,大家应该也不陌生,凌驾于应用之上的一个小弹窗,实现上很简单,就是添加一个系统级别的窗口,Android中通过WindowManagerService( WMS)来管理所有的窗口 ; 2、FloatMonkService,是一个服务,开启服务的时候创建悬浮窗; 3、FloatCallBack,交互接口,在FloatMonkService里面实现接口,用于交互; 4、FloatWindowManager 需要FloatMonkService里头动态注册; 6、FloatActionController,其实就是代理,其它模块需要通过它来和悬浮窗进行交互,真正干活的是实现FloatCallBack接口的 3、具体实现 float_littlemonk_layout.xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android FloatActionController.java /** * Author:xishuang * Date:2017.08.01 * Des:与悬浮窗交互的控制类,真正的实现逻辑不在这 */
前言 之前有写录制视频的小demo,有同学反映要添加浮窗View,这样录制的时候就不需要来回切换当前的页面。所以,这里我晚上花了点时间写了一个FloatingView。 老规矩,先看图 ? mWindowManager.removeView(mFloatingView); } } Mainfest.xml需要添加相关权限以及注册Service <uses-permission android :name="android.permission.SYSTEM_ALERT_WINDOW"/> <service android:name="cn.android.example.knowledge.service.FloatingViewService " android:enabled="true"/> 这样,就可以把之前的录制视频的代码,与FloatingView相结合,这样录制起来就方便一点了。
FloatingX ,一个强大的免权限悬浮窗组件,支持全局,以及局部悬浮窗。 背景 在前几个月的业务开发中,我们 app 需要对悬浮窗进行更改,常见的悬浮窗实现方式分为两种: 前者是获取权限后,利用 WindowManager 实现 后者是基于 DecorView 实现的插入悬浮窗 App 级别悬浮窗 基于 DecorView 的的实现方案,全局持有一个单独的悬浮窗 View ,通过 AppLifecycle 监听 Activity 生命周期,并在相应时机 插入到 DecorView 插入到 DecorView 可以最大程度控制悬浮窗的自由度,即悬浮窗可以真正意义上[全屏]拖动。 感谢 基础 悬浮窗View 源自 EnFloatingView 的 FloatingMagnetView 实现方式,并在其基础上增加了一些改进。
实现方法:(需要开启悬浮窗通知权限、允许应用在其他应用上显示) 一.利用headsup 悬挂式Notification,他是5.0中新增的,也就是API中的Headsup的Notification,可以在不打断用户操作的时候 ,给用户通知 二.使用Window创建悬浮窗 当window属性设置为FLAGE_NOT_FOCUSABLE表示不需要获取焦点,也不需要接受各种输入事件,此标记会同时启用FLAGE_NOT_TOUCH_MODEL ) 提示:6.0之后需要动态权限 注意:在某些rom下使用headsup并不会显示桌面悬浮窗,而是直接跳转到相应的界面,亲测华为,小米都是这种情况,这种情况下需要自己实现悬浮窗 具体实现: 利用headsup 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。 总结 以上所述是小编给大家介绍的Android实现类似qq微信消息悬浮窗通知功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。
最近因为项目需要,自己实现了个可以自由移动,并且长按可以跳出一个控制播放的,大的悬浮窗。 好,开始吧。 首先我们先聊权限,悬浮窗需要在manifest中声明一个权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW " / 然后呢,嗯,我们来讲讲关于悬浮窗实现的原理。 在Andriod中,所有的界面元素都要通过windowmanger来实现,像Activity、Fragment等等这些也是在其上实现。因此,我们的悬浮窗自然要通过这个实现。 实现悬浮窗 以上就是本文的全部内容,希望对大家的学习有所帮助。
背景 ---- 游戏内的悬浮窗通常情况下只出现在游戏内,用做切换账号、客服中心等功能的快速入口。 本文将介绍几种实现方案,以及我们踩过的坑 方案一:应用外悬浮窗+栈顶权限/生命周期回调 ---- 通常实现悬浮窗,首先考虑到的会是要使用悬浮窗权限,用 WindowManager 在设备界面上 addView 实现( UI 层级较高,应用外显示) 1、弹出悬浮窗需要用到悬浮窗权限 <! --悬浮窗权限--> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 2、判断悬浮窗游戏内外显示 但是这种方案有如下缺点: 适配问题,悬浮窗权限在不同设备上由于不同产商实现不同,适配难 向用户申请权限,打开率较低,体验较差 方案二:addContentView实现 ---- 原理:Activity
前言 前几天我刚写了一篇《Android实现可移动的悬浮窗》的文章,需要在AndroidManifest.xml里的加上权限申请 ? 在度娘的帮助下,找到了下面这篇文章《Android无需权限显示悬浮窗, 兼谈逆向分析app》 由于无法超链接,这里贴上地址:https://www.jianshu.com/p/167fd5f47d5c android4.3及以下的版本中,如果用TYPE_TOAST悬浮窗正常显示, 但不能接受触摸事件. ---- 回到我们上次悬浮窗的代码 ? 我们把原来红框里面兼容android8,0版本的判断去掉,改为下面绿框里面的当api<19时用的TYPE_PHONE,否则是TYPE_TOAST. 再运行程序即可实现不用动态申请上层权限即可实现android的悬浮窗效果了。 ---- -END-
在项目中需要对接入的腾讯云音视频,可以悬浮窗显示,悬浮窗可拖拽,并且在悬浮窗不影响其他的activity的焦点。 这个大神的文章Android基于腾讯云实时音视频仿微信视频通话最小化悬浮,他讲的是视频通话时,将远端视频以悬浮窗形式展示,根据他的代码我进行了部分简化 1.悬浮窗效果:点击缩小按钮,将当前远端视屏加载进悬浮窗 ,且悬浮窗可拖拽,不影响其他界面焦点;点击悬浮窗可返回原来的Activity 2.实现悬浮窗需要: 在androidManifest中申请悬浮窗权限<uses-permission android:name =”android.permission.SYSTEM_ALERT_WINDOW”/ 在androidManifest中注册FloatWindowService 3.视屏activity实现: -将activity mServiceBound) { unbindService(mVideoCallServiceConnection);//解绑 mServiceBound = false; } 4.悬浮窗实现相关代码
序言 前些日子跟朋友聊天,朋友Z果粉,前些天更新了微信,说微信出了个好方便的功能啊,我问是啥功能啊,看看我大Android有没有,他说现在阅读公众号文章如果有人给你发微信你可以把这篇文章当作悬浮窗悬浮起来 ,方便你聊完天不用找继续阅读,听完是不是觉得这叫啥啊,我大Android微信版不是早就有这个功能了吗,我看文章的时候看到过有这个悬浮按钮,但是我一直没有使用过,试了一下还是挺方便的,就想着自己实现一下这个功能 实现 1、权限 首先我们要考虑的一个问题就是权限问题,因为要适配Android 7.0 8.0,添加悬浮窗是需要申请权限的,这里参考了Android 悬浮窗权限各机型各系统适配大全这篇文章,适配的比较全 - 200; 26 mLayoutParams.y = 0; 27 mWindowManager.addView(mView, mLayoutParams); 28} 3、View的拖拽实现 借助WindowManager.LayoutParams来实现,mLayoutParams.x和mLayoutParams.y分别表示mView左上角的横纵坐标,所以我们只需要改动这两个值就行了,当ACTION_UP
这里就来构建一个桌面的悬浮窗,使用了DataBinding的MVVM模式,这些方面就不再多提。 FloatNormalView 这个是一个普通的悬浮窗,悬浮窗只有一个按钮,点击按钮显示更多的按钮。 首先是页面布局: <? WindowManager和控制悬浮窗布局的LayoutParams 然后使用如下代码就可展示悬浮窗了: public void show() { if (! = null) onClickCallback.onClick(view); } 多功能悬浮窗 多功能悬浮窗与上面类似,只不过在点击事件上较多而已。 而如何完成两个悬浮窗的切换呢,就可以利用之前所使用的OnClickCallback回调接口了,将一个显示、另一个隐藏即可,且两个悬浮窗若采用同一个LayoutParams就可以让两个显示在同一个位置。
3 6.0出现的悬浮窗权限 为什么从6.0说起? 在Android6.0之后,使用悬浮窗功能需要申请开启悬浮窗权限,在API23以下版本编译,悬浮窗权限关闭的,但是没有权限限制,在大于23版本编译,这个权限默认是关闭的,需要获取权限。 6.0之后判断是否有悬浮窗权限,没有则申请权限 <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/> (Settings.ACTION_MANAGE_OVERLAY_PERMISSION); Toast.makeText(MainActivity.this,"需要取得权限以使用悬浮窗 = new Intent(MainActivity.this, MainService.class); startService(intent); finish(); } 4 8.0对悬浮窗的优化
Android 各版本查询和开启悬浮窗权限 如果你是从事Android开发的程序员,那么你肯定对于权限这个词不会陌生,Android的权限分为一般权限和危险权限,一般权限(只需在AndroidManifest.xml 悬浮窗权限 悬浮窗权限不同于其他的权限如相机、相册、文件读写权限等,这些权限,动态申请后,用户只要的应用里面弹出来的提示框里面开启就可以了,并不会离开应用,而开启悬浮窗权限用户则需要进入到应用列表或者是应用详情里面开启悬浮窗权限 业务逻辑: APP默认是没有开启这个悬浮窗权限的,所以需要申请,而申请之后又要先判断有没有开启这个权限,这个判断是很重要的,你总不能每次都让用户去应用列表看这个权限有没有开启吧。 判断也是要分Android的版本的,如Android6.0、Android6.0至Android8.0、Android8.0以上,更低的版本就不考虑了,(你不要和我说你现在还用着Android4.4或者 " /> 权限检查 //判断是否开启悬浮窗权限 context可以用你的Activity.或者tiis public static boolean checkFloatPermission
扫码关注腾讯云开发者
领取腾讯云代金券