写一个kotlin的 悬浮窗
时间: 2024-01-31 08:38:06 浏览: 138
以下是一个简单的 Kotlin 悬浮窗实现示例:
1. 创建一个 `FloatWindowService` 类,继承自 `Service`。
```
class FloatWindowService : Service() {
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
// 创建悬浮窗
createFloatWindow()
}
override fun onDestroy() {
super.onDestroy()
// 移除悬浮窗
removeFloatWindow()
}
// 创建悬浮窗
private fun createFloatWindow() {
// 获取 WindowManager
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
// 创建悬浮窗布局
val floatView = LayoutInflater.from(this).inflate(R.layout.layout_float_window, null)
// 悬浮窗参数设置
val params = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY else WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
// 添加悬浮窗布局到 WindowManager
windowManager.addView(floatView, params)
}
// 移除悬浮窗
private fun removeFloatWindow() {
// 获取 WindowManager
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
// 移除悬浮窗布局
windowManager.removeViewImmediate(floatView)
}
}
```
2. 创建 `layout_float_window.xml` 布局文件。在该布局中添加需要展示的控件。
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="悬浮窗"
android:textSize="20sp"
android:textColor="#ffffff"
android:background="#000000"
android:padding="10dp"/>
</LinearLayout>
```
3. 在 `AndroidManifest.xml` 中注册 `FloatWindowService`。
```
<service
android:name=".FloatWindowService"
android:enabled="true"
android:exported="true" />
```
4. 在需要启动悬浮窗的地方,通过 `startService()` 启动 `FloatWindowService`。
```
val intent = Intent(this, FloatWindowService::class.java)
startService(intent)
```
注意:悬浮窗需要申请悬浮窗权限,可以通过 `Settings.ACTION_MANAGE_OVERLAY_PERMISSION` 打开系统设置页面让用户手动授权,或者在应用启动时动态申请权限。
阅读全文