一、MediaProjection介绍
MediaProjection是Android提供的一个API,它允许应用程序捕获和录制设备屏幕上的内容。通过使用MediaProjection API,应用程序可以捕获屏幕上的视频和音频,并将其保存为视频文件或流式传输到网络。MediaProjection API还可以用于创建屏幕截图和屏幕录制应用程序。
使用MediaProjection API需要以下步骤:
-
获取MediaProjectionManager实例。
-
调用MediaProjectionManager.createScreenCaptureIntent()方法,启动屏幕捕获Intent。
-
在Activity.onActivityResult()方法中,获取MediaProjection实例。
-
创建VirtualDisplay实例,将屏幕内容渲染到Surface上。
-
创建MediaRecorder实例,设置音视频编码器和输出格式。
-
调用MediaRecorder.setVideoSource()方法,设置视频源为VirtualDisplay。
-
调用MediaRecorder.setOutputFile()方法,设置输出文件路径。
-
调用MediaRecorder.prepare()方法,准备录制。
-
调用MediaRecorder.start()方法,开始录制。
-
调用MediaRecorder.stop()方法,停止录制。
二、MediaProjection相关类
MediaProjection
MediaProjection代码位于:
frameworks/base/media/java/android/media/projection/MediaProjection.java
MediaProjection的定义:
public final class MediaProjection {
public static abstract class Callback {}
private final class MediaProjectionCallback extends IMediaProjectionCallback.Stub {}
private final static class CallbackRecord {}
}
MediaProjectionInfo
MediaProjectionInfo代码位于:
frameworks/base/media/java/android/media/projection/MediaProjectionInfo.java
MediaProjectionInfo的定义:
public final class MediaProjectionInfo implements Parcelable {}
MediaProjectionManager
MediaProjectionManager代码位于:
frameworks/base/media/java/android/media/projection/MediaProjectionManager.java
MediaProjectionManager的定义:
public final class MediaProjectionManager {
public static abstract class Callback {}
private final static class CallbackDelegate extends IMediaProjectionWatcherCallback.Stub {}
}
MediaProjectionManagerService
MediaProjectionManagerService代码位于:
frameworks/base/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java
MediaProjectionManagerService的定义:
public final class MediaProjectionManagerService extends SystemService implements Watchdog.Monitor {
private final class BinderService extends IMediaProjectionManager.Stub {}
private final class MediaProjection extends IMediaProjection.Stub {}
private class MediaRouterCallback extends MediaRouter.SimpleCallback {}
private static class CallbackDelegate {}
private static final class WatcherStartCallback implements Runnable {}
private static final class WatcherStopCallback implements Runnable {}
private static final class ClientStopCallback implements Runnable {}
}
三、MediaProjection API
VirtualDisplay createVirtualDisplay(String name, int width, int height, int dpi, int flags, Surface surface, VirtualDisplay.Callback callback, Handler handler):创建一个 VirtualDisplay来捕获屏幕的内容。
void registerCallback(MediaProjection.Callback callback, Handler handler):注册侦听器以接收有关 MediaProjection更改状态的通知。
void stop():停止投影。
void unregisterCallback(MediaProjection.Callback callback):取消注册MediaProjection侦听器。