Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案

Posted Wei_Leng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案相关的知识,希望对你有一定的参考价值。

PerfectFloatWindow

项目地址:Alonsol/PerfectFloatWindow 

简介: android 全局悬浮窗,目前已经适配华为,小米,vivo,oppo,一加,三星,魅族,索尼,LG,IQOO,努比亚,中兴,金立,360,锤子等目前是市面上所有机型兼容 android4.1 至 android11 版本,支持 androidX

更多:作者   提 Bug   

标签:

Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案。目前已经适配华为,小米,vivo,oppo,一加,三星,魅族,索尼,LG,IQOO,努比亚,中兴,金立,360,锤子等目前是市面上主流机型包括非主流机型,兼容 4.4 以上包括 android11 版本。调用方便,配置少,后续会新增更多功功能,绝对满足你的定制化需求

特性

  1. 支持悬浮窗内容自定义

  2. 内部已处理权限校验,以及设置页面跳转

  3. 支持 builder 模式,方便动态配置

  4. 支持悬浮窗手势滑动

  5. 适配 vivo,oppo 等第三方权限管理器跳转

  6. 支持应用内以及应用外全局弹窗

  7. 权限开启弹窗支持用户自定义

1.初始化悬浮窗控件

        //定义悬浮窗助手
        floatHelper = FloatClient.Builder()
            .with(this)
            .addView(view)
            //是否需要展示默认权限提示弹窗,建议使用自己的项目中弹窗样式(默认开启)
            .enableDefaultPermissionDialog(false)
            .setClickTarget(MainActivity::class.java)
            .addPermissionCallback(object : IFloatPermissionCallback 
                override fun onPermissionResult(granted: Boolean) 
                    //(建议使用 addPermissionCallback 回调中添加自己的弹窗)
                    Toast.makeText(this@MainActivity, "granted -> $granted", Toast.LENGTH_SHORT)
                        .show()
                    if (!granted) 
                        //申请权限
                        floatHelper?.requestPermission()
                    
                
            )
            .build()

2.开启默认弹窗,默认开启(建议开发者根据自己的样式进行)

    enableDefaultPermissionDialog(true)

3.悬浮窗权限回调 用户设置该回调后,可以处理自己的回调逻辑,设置该监听后,enableDefaultPermissionDialog 选项失效

    addPermissionCallback(object : IFloatPermissionCallback 
                override fun onPermissionResult(granted: Boolean) 
                    //(建议使用 addPermissionCallback 回调中添加自己的弹窗)
                    //granted = true 权限通过 granted = false 权限拒绝
                    if (!granted) 
                        //申请权限
                        floatHelper?.requestPermission()
                    
                
            )

4.申请悬浮窗权限

    floatHelper?.requestPermission()

5.设置点击跳转目标

    floatHelper?.setClickTarget(MainActivity::class.java)

6.开启悬浮窗

    floatHelper?.show()

7.关闭悬浮窗

    floatHelper?.dismiss()

8.关闭悬浮窗并释放资源

    override fun onDestroy() 
        super.onDestroy()
        floatHelper?.release()
    

9.更新悬浮窗控件

    private fun initCountDown() 
        countDownTimer = object : CountDownTimer(Long.MAX_VALUE, 1000) 
            override fun onTick(millisUntilFinished: Long) 
                //更新悬浮窗内容(这里根据自己的业务进行扩展)
                tvContent.text = getLeftTime(millisUntilFinished)
            

            override fun onFinish() 

            
        
        countDownTimer?.start()
    

    fun getLeftTime(time: Long): String 
        val formatter = SimpleDateFormat("HH:mm:ss")
        formatter.timeZone = TimeZone.getTimeZone("GMT+00:00")
        return formatter.format(time)
    

10.权限申请

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

11.配置

    implementation 'com.alonsol:floatserver:1.0.0'

结语

、、 PerfectFloatWindow 做了大量的机型测试,满足绝大部分市场上机型,欢迎大家提供宝贵意见。 兼容性没有问题,如果需要调整悬浮窗动画以及动画,建议修改 floatServer 中的窗口配置,后续会对外提供相关接口

 

以上是关于Android 悬浮窗,绝对是目前相关悬浮窗开源库最完美的适配方案的主要内容,如果未能解决你的问题,请参考以下文章

Android悬浮窗原理解析(Window)[源码]

Android 桌面悬浮窗效果实现,仿360手机卫士悬浮窗效果

Android悬浮窗

Android悬浮窗

android里悬浮窗如何覆盖状态栏

Android 悬浮窗如何能让它和他的的下层一起响应触摸事件?