Android 设置activity的视频浮窗
时间: 2023-11-27 21:05:22 浏览: 116
要实现在 Android 中设置 Activity 的视频浮窗,可以使用系统的 WindowManager 类。以下是实现的步骤:
1. 在你的 Activity 中,创建一个 SurfaceView,用于显示视频。
2. 创建一个悬浮窗口视图,将 SurfaceView 添加到其中,并设置悬浮窗口的大小和位置。
3. 通过 WindowManager 类将悬浮窗口视图添加到系统 WindowManager 中。
4. 在 Activity 的 onDestroy() 方法中,将悬浮窗口视图从 WindowManager 中移除。
5. 可以使用 MediaPlayer 类或 ExoPlayer 类来实现视频播放。
以下是示例代码:
```java
public class MainActivity extends AppCompatActivity {
private WindowManager windowManager;
private WindowManager.LayoutParams layoutParams;
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 创建 SurfaceView,用于显示视频
surfaceView = new SurfaceView(this);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
// SurfaceView 创建完成后,开始播放视频
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource("your_video_path");
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// SurfaceView 销毁时,停止播放视频
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
});
// 创建悬浮窗口视图,将 SurfaceView 添加到其中
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY : WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
layoutParams.gravity = Gravity.TOP | Gravity.LEFT;
layoutParams.x = 0;
layoutParams.y = 0;
windowManager.addView(surfaceView, layoutParams);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 在 onDestroy() 方法中,将悬浮窗口视图从 WindowManager 中移除
if (surfaceView != null) {
windowManager.removeView(surfaceView);
surfaceView = null;
}
}
}
```
注意:在 Android 8.0 及以上版本中,需要使用 TYPE_APPLICATION_OVERLAY 类型来显示悬浮窗口视图。此外,为了避免出现权限问题,还需要在 AndroidManifest.xml 文件中添加 SYSTEM_ALERT_WINDOW 权限声明。
阅读全文