// 文件位置:Android/tuilivekit/src/main/java/com/trtc/uikit/livekit/component/floatwindow/corecore // 悬浮窗核心功能的实现目录├── impl // 悬浮窗的具体实现├── FloatWindow.java // 悬浮窗功能对外接口└── FloatWindowObserver.java // 悬浮窗监听器
Android/tuilivekit
,您可以将该目录拷贝到您的工程中使用。//contentView
是您要放在悬浮窗上展示的内容视图,请需要替换成自己的视图。// contentView
上的状态、事件和业务逻辑等由您自己负责。FloatWindow
只是负责把contentView
展示出来。TextView contentView = new TextView(this);contentView.setBackgroundColor(0xE022262E);contentView.setTextColor(Color.YELLOW);contentView.setGravity(Gravity.CENTER);contentView.setText("This is a float window");FloatWindow floatWindow = FloatWindow.getInstance();floatWindow.setView(contentView);floatWindow.show();
AndroidManifest.xml
中注册android.permission.SYSTEM_ALERT_WINDOW
权限:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /></manifest>
FloatWindow floatWindow = FloatWindow.getInstance();if (floatWindow.hasPermission()) {floatWindow.setView(contentView);floatWindow.show()} else {floatWindow.requestPermission();}
Android6.0
及以上系统,需要申请悬浮窗权限。您也可以自己实现申请悬浮窗权限的逻辑,只要在获得悬浮窗权限后调用 FloatWindow
的 show 方法即可。FloatWindow floatWindow = FloatWindow.getInstance();floatWindow.setObserver(new FloatWindowObserver() {@Overridepublic void onClickWindow() {// 收到点击悬浮窗的通知,通常您需要在此实现的业务逻辑是:切换到正常全屏模式,并关闭悬浮窗。}@Overridepublic void onMove(int x, int y) {// 收到悬浮窗移动的通知}});
FloatWindow floatWindow = FloatWindow.getInstance();floatWindow.setSize(width, height);floatWindow.setLocation(x, y);floatWindow.setMarginToEdge(margin);
正常模式切换到悬浮窗模式 | 悬浮窗模式切换到正常模式 |
申请悬浮窗权限(如果有权限那么无需申请); 创建内容视图,并设置给悬浮窗; 退出 Activity ,但要保留相关业务的数据和状态。弹出悬浮窗。 | 监听悬浮窗事件; 在收到 onClickWindow 通知时,关闭悬浮窗,然后跳转回到原来的 Activity ,并恢复相关业务的数据和状态。 |
LiveCoreView
对象,用于在两种模式下展示直播内容,这样不但可以共享视图,还可以共享直播数据和状态。LiveActivity
场景,悬浮窗模式是LiveFloatWindow
场景,在模式切换过程中,可以使用同一个 LiveCoreView
对象,以保证直播过程正常进行。由于 LiveCoreView
要在LiveActivity
销毁后依然能在 LiveFloatWindow
使用,所以创建 LiveCoreView
时使用的 context
是 ApplicationContext
而非 Activity
。LiveCoreView liveCoreView = new LiveCoreView(context.getApplicationContext());
Android/tuilivekit
直播场景默认实现了悬浮窗功能,可以供您参考:// 文件位置:Android/tuilivekit/src/main/java/com/trtc/uikit/livekit/component/floatwindowfloatwindow // 悬浮窗功能的实现目录├── service // LiveKit 悬浮窗业务相关目录│ └── FloatWindowManager.java // 负责实现悬浮窗模式与正常模式切换等业务├── store // LiveKit 悬浮窗状态相关目录│ └── FloatWindowStore.java└── view // LiveKit 悬浮窗视图相关目录├── VideoFloatView.java // 直播场景悬浮窗内容视图└── VoiceFloatView.java // 语聊场景悬浮窗内容视图。语聊暂未支持悬浮窗。
本页内容是否解决了您的问题?