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)
}
逻辑图
我们可以通过重写
Activity
中的onBackPress
方法来实现按下back
键出现悬浮框的功能。从 Android 4.0 开始,
Home
键就无法再通过Activity.onKeyDown
方法来监听和拦截键了,虽然还象征性的保留了Home
键的KeyCode
来向前兼容,但是Home
键按下去,并不会回调这个方法。除了onKeyDown
还有ACTION_CLOSE_SYSTEM_DIALOGS
广播可以监听到应用退出后台。但是这时候应用已经退出到后台了,我们只能监听不能进行拦截。