精华内容
下载资源
问答
  • 项目demo包含以下功能: ...2、直接跳转当前应用在手机上的悬浮窗开关按钮 3、判断应用是否打开悬浮窗和后台弹出权限状态 4、跳转失败跳转应用详情页面 5、简单实现悬浮窗功能,并支持跟随手指移动
  • 实现了无需申请权限,既可以弹出悬浮窗的功能,包括miui,锤子、魅族等第三方ROM,可以点击和拖动悬浮窗(但是需要4.4以上的系统)
  • 我们大多数在两种情况下可以看到悬浮窗,一个是视频通话时的悬浮窗,另一个是360卫士的悬浮球,实现此功能的方式比较多,这里以视频通话悬浮窗中的需求为例。编码实现使用Kotlin。Java版本留言邮箱即可。 业务场景 ...
  • 主要介绍了Android悬浮窗屏蔽悬浮窗外部所有的点击事件实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • Andorid 任意界面悬浮窗,实现悬浮窗如此简单
  • 主要介绍了Android 悬浮窗权限各机型各系统适配大全(总结),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android系统悬浮窗的实现,以button按钮为例,实现悬浮窗的展示,以及悬浮窗的拖动效果,对Android 6.0以下、Android 6.0以上,以及Android 8.0以上做了处理,可以适应大部分Android版本
  • 悬浮窗,大家应该也不陌生,凌驾于应用之上的一个小弹窗,实现上很简单,就是添加一个系统级别的窗口,Android中通过WindowManagerService( WMS)来管理所有的窗口,对于WMS来说,管你是Activity、Toast、Dialog,...
  • 主要为大家详细介绍了android桌面悬浮窗,显示录屏时间控制效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 今天小编就为大家分享一篇Android 获取判断是否有悬浮窗权限的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 使用android IntentService后台截屏并且实现悬浮窗口动态显示
  • 那么今天我们就来实现一下Android悬浮窗,以及探索一下实现悬浮窗时的易错点。 1. 实现原理 1.1 悬浮窗插入接口  在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去。  Android的界面...
  • Android应用开发中,经常要遇到做全局悬浮窗的效果,本文的内容主要是如何不依赖于Activity的全局悬浮窗的实现及原理,有需要的可以参考。
  • Android悬浮窗实现demo

    千次下载 热门讨论 2014-12-30 15:50:28
    Android悬浮窗实现demo,事件监听处理
  • 在qt for android上实现的悬浮窗,程序比较粗糙,第一次运行需要允许overlay权限,可以简单参考下
  • 主要为大家详细介绍了Android仿微信视屏悬浮窗效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 实时获取网络下载速度并在悬浮窗上显示,可自定义获取周期 实时获取网络下载速度并在悬浮窗上显示,可自定义获取周期
  • 最近在一个项目中,需要制作录屏的功能,原先是在应用中有录屏/控制的按钮,思考之下觉得这种效果并不好,因此就想制作一个可以悬浮的悬浮窗,这样不论手机在什么界面中都可以对录屏功能进行控制。 这里就来构建一个...
  • Android悬浮窗

    2017-11-01 10:22:24
    Android悬浮窗示例,Eclipse可直接运行出结果,AndroidStudio的话可以代码迁移
  • 4.仿微信语音通话悬浮窗效果实现 4.1 需求分析及效果展示  4.2 实现 5.最后 1.基本介绍 Android 界面绘制都是通过 WindowManager 服务来实现的,WindowManager 对象可通过获取 WINDOW_SERVICE 系统服务得到,并...
  • Android 视频悬浮窗

    2018-10-29 19:44:54
    本代码资源是关于,Android视频悬浮窗的,里面的代码可以直接运行
  • 1、在手机桌面创建一个窗口,类似于360的悬浮窗口,点击这个窗口可以响应(至于窗口拖动我们可以后面再扩展)。 2、自己开发的应用去启动一个非本应用B,在B应用的某个界面增加一个引导窗口。 3、在应用的页面上...
  • 1. AndroidManifest.xml添加权限 <uses-permission android:name="android....2. 打开系统开启悬浮窗界面 if (!Settings.canDrawOverlays(context)) { Intent intent = new Intent(); intent.setAction(Se

    1. AndroidManifest.xml添加权限

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    

    2. 打开系统开启悬浮窗界面

      if (!Settings.canDrawOverlays(context)) {
                        Intent intent = new Intent();
                        intent.setAction(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                        context.startActivity(intent);
                    }
    

    其中,Settings.canDrawOverlays(this)方法是在API level 23也就是Android M中新加入的用于检查当前是否拥有出现在“出现在其他应用上”权限的方法。
    在6.0以前的系统版本,悬浮窗权限是默认开启的,直接使用即可

    3.判断是否打开悬浮窗权限

    Settings.canDrawOverlays(context)
    
    展开全文
  • 可以在 Android Studio 直接运行的悬浮窗demo,一个Activity启动一个service,service绘制一个view在桌面。
  • Android悬浮窗实现(含8.0权限适配) 序言 前些日子跟朋友聊天,朋友Z果粉,前些天更新了微信,说微信出了个好方便的功能啊,我问是啥功能啊,看看我大Android有没有,他说现在阅读公众号文章如果有人给你发微信你...
  • FloatWindow 安卓任意界面悬浮窗 特性: 1.支持拖动,提供自动贴边等动画 2.内部自动进行权限申请操作 3.可自由指定要显示悬浮窗的界面 4.应用退到后台时,悬浮窗会自动隐藏 5.除小米外,4.4~7.0 无需权限申请 6....
  • 实现添加悬浮窗的核心源码代码WindowManagerService#addWindow方法中有以下几个关键:1.权限检查mPolicy.checkAddPermission(attrs, appOp);2.悬浮窗参数调整mPolicy.adjustWindowParamsLw(win.mAttrs);查看不同...

    实现添加悬浮窗的核心源码代码WindowManagerService#addWindow方法中有以下几个关键:

    1.权限检查

    mPolicy.checkAddPermission(attrs, appOp);

    2.悬浮窗参数调整

    mPolicy.adjustWindowParamsLw(win.mAttrs);

    查看不同android版本的源码对比

    结论:

    android 4.4(api 19)之前使用TYPE_TOAST 可以显示,但是不能接收触摸事件和按键事件

    mPolicy实际上是PhoneWindowManager。

    对比checkAddPermission()方法变化结论:

    android 4.3(api 18) 开始 TYPE_TOAST根本没有做权限检查, 直接break出去了, 最后返回WindowManagerGlobal.ADD_OKAY。这个就是使用TYPE_TOAST不需要权限显示悬浮窗的原因

    //android 4.3_r2.1

    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {

    int type = attrs.type;

    outAppOp[0] = AppOpsManager.OP_NONE;

    if (type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW

    || type > WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) {

    return WindowManagerGlobal.ADD_OKAY;

    }

    String permission = null;

    switch (type) {

    case TYPE_TOAST:

    // XXX right now the app process has complete control over

    // this... should introduce a token to let the system

    // monitor/control what they are doing.

    break;

    case TYPE_DREAM:

    case TYPE_INPUT_METHOD:

    case TYPE_WALLPAPER:

    // The window manager will check these.

    break;

    case TYPE_PHONE:

    case TYPE_PRIORITY_PHONE:

    case TYPE_SYSTEM_ALERT:

    case TYPE_SYSTEM_ERROR:

    case TYPE_SYSTEM_OVERLAY:

    permission = android.Manifest.permission.SYSTEM_ALERT_WINDOW;

    outAppOp[0] = AppOpsManager.OP_SYSTEM_ALERT_WINDOW;

    break;

    default:

    permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;

    }

    if (permission != null) {

    if (mContext.checkCallingOrSelfPermission(permission)

    != PackageManager.PERMISSION_GRANTED) {

    return WindowManagerGlobal.ADD_PERMISSION_DENIED;

    }

    }

    return WindowManagerGlobal.ADD_OKAY;

    }

    //android 4.4_r1

    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {

    int type = attrs.type;

    outAppOp[0] = AppOpsManager.OP_NONE;

    if (type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW

    || type > WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) {

    return WindowManagerGlobal.ADD_OKAY;

    }

    String permission = null;

    switch (type) {

    case TYPE_TOAST:

    // XXX right now the app process has complete control over

    // this... should introduce a token to let the system

    // monitor/control what they are doing.

    break;

    case TYPE_DREAM:

    case TYPE_INPUT_METHOD:

    case TYPE_WALLPAPER:

    case TYPE_PRIVATE_PRESENTATION:

    // The window manager will check these.

    break;

    case TYPE_PHONE:

    case TYPE_PRIORITY_PHONE:

    case TYPE_SYSTEM_ALERT:

    case TYPE_SYSTEM_ERROR:

    case TYPE_SYSTEM_OVERLAY:

    permission = android.Manifest.permission.SYSTEM_ALERT_WINDOW;

    outAppOp[0] = AppOpsManager.OP_SYSTEM_ALERT_WINDOW;

    break;

    default:

    permission = android.Manifest.permission.INTERNAL_SYSTEM_WINDOW;

    }

    if (permission != null) {

    if (mContext.checkCallingOrSelfPermission(permission)

    != PackageManager.PERMISSION_GRANTED) {

    return WindowManagerGlobal.ADD_PERMISSION_DENIED;

    }

    }

    return WindowManagerGlobal.ADD_OKAY;

    }

    对比adjustWindowParamsLw()方法变化结论:

    android 4.4(api 19) 之前的TYPE_TOAST不能接收触摸事件和按键事件

    //android 4.3_r2.1

    public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) {

    switch (attrs.type) {

    case TYPE_SYSTEM_OVERLAY:

    case TYPE_SECURE_SYSTEM_OVERLAY:

    case TYPE_TOAST:

    // These types of windows can't receive input events.

    attrs.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

    attrs.flags &= ~WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;

    break;

    }

    }

    //android 4.4_r1

    public void adjustWindowParamsLw(WindowManager.LayoutParams attrs) {

    switch (attrs.type) {

    case TYPE_SYSTEM_OVERLAY:

    case TYPE_SECURE_SYSTEM_OVERLAY:

    // These types of windows can't receive input events.

    attrs.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;

    attrs.flags &= ~WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;

    break;

    }

    }

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,253
精华内容 4,501
关键字:

安卓设置悬浮窗