Android 悬浮框

Android 悬浮框在IM应用或者音视频应用中经常会有用到,这也是我第二次开发这悬浮框这个功能了,为了避免以后再开发时还要一次次去往上查资料,这里记录一下悬浮框的开发过程。

现在我要实现的功能是:当用户点击 back键或者home键时,应用退到后台,并打开悬浮框。

悬浮框权限

首先我们需要在 AndroidManifest.xml 中定义悬浮框所需要的权限:

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

如果 Android SDK 版本大于等于 23,我们还需要判断应用是否有悬浮框权限,若没有需要跳转到授权界面让用户打开:

if (!Settings.canDrawOverlays(this)) {
    val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
    intent.data = Uri.parse("package:$packageName")
    startActivityForResult(intent, 1)
}

逻辑图

悬浮框逻辑.png
  • 我们可以通过重写 Activity 中的 onBackPress 方法来实现按下 back 键出现悬浮框的功能。

  • 从 Android 4.0 开始,Home 键就无法再通过 Activity.onKeyDown 方法来监听和拦截键了,虽然还象征性的保留了 Home 键的 KeyCode 来向前兼容,但是 Home 键按下去,并不会回调这个方法。除了 onKeyDown 还有 ACTION_CLOSE_SYSTEM_DIALOGS 广播可以监听到应用退出后台。但是这时候应用已经退出到后台了,我们只能监听不能进行拦截。

源码

https://github.com/Linfeng1028/FloatWindow

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。