为了账号安全,请及时绑定邮箱和手机立即绑定

三行代码实现Android应用内悬浮窗,无需一切权限,适配所有ROM和厂商

标签:
Android

悬浮窗实现传统方案

对于传统悬浮窗和一些古老的“黑科技”悬浮窗的实现,想必已经有很多成熟的案例了,实现策略基本为以下两种:

  1. TYPE_SYSTEM_ALERT类型

mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams()
layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

需要权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses>
  1. TYPE_TOAST / TYPE_PHONE 类型

7.1.1以下不需要权限声明,在魅族、华为、小米等机型上默认隐藏,需要引导用户打开悬浮窗。

传统方案的问题

第一种方案因为存在各种限制,不能被众多开发采纳,故而比较流行的悬浮窗实现方式是第二种。

但是,我们有自己的原则:

  • 不能接受7.1.1以上机型,使用第二种方式实现悬浮窗仍需要用户主动授予权限的操作?

  • 不能接受在魅族、华为、小米等机型上默认隐藏,需要引导用户打开悬浮窗,就像这样

[站外图片上传中...(image-18b632-1541251502358)]

功能

  • 应用内显示,无需申请任何权限

  • 应用内显示,所有机型都可以默认显示悬浮窗,无需引导用户做更多设置

  • 支持拖拽

  • 超出屏幕限制移动

  • 可自动吸附到屏幕边缘

使用规则

  1. 在基类Activity(注意必须是基类Activity)中的onStart和onStop添加如下代码

        @Override
        protected void onStart() {        super.onStart();
            FloatingViewManager.getInstance().attach(this);
        }    @Override
        protected void onStop() {        super.onStop();
            FloatingViewManager.getInstance().detach(this);
        }
  1. 展示悬浮窗

        FloatingViewManager.getInstance().add(getApplicationContext());
  2. 销毁悬浮窗

        FloatingViewManager.getInstance().remove();

附上Github链接:
https://github.com/leotyndale/EnFloatingView

效果图

webp



作者:李良逸
链接:https://www.jianshu.com/p/6c10b6bf14af


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消