Android MediaProjection

一、MediaProjection介绍

MediaProjection是Android提供的一个API,它允许应用程序捕获和录制设备屏幕上的内容。通过使用MediaProjection API,应用程序可以捕获屏幕上的视频和音频,并将其保存为视频文件或流式传输到网络。MediaProjection API还可以用于创建屏幕截图和屏幕录制应用程序。

使用MediaProjection API需要以下步骤:

  1. 获取MediaProjectionManager实例。

  2. 调用MediaProjectionManager.createScreenCaptureIntent()方法,启动屏幕捕获Intent。

  3. 在Activity.onActivityResult()方法中,获取MediaProjection实例。

  4. 创建VirtualDisplay实例,将屏幕内容渲染到Surface上。

  5. 创建MediaRecorder实例,设置音视频编码器和输出格式。

  6. 调用MediaRecorder.setVideoSource()方法,设置视频源为VirtualDisplay。

  7. 调用MediaRecorder.setOutputFile()方法,设置输出文件路径。

  8. 调用MediaRecorder.prepare()方法,准备录制。

  9. 调用MediaRecorder.start()方法,开始录制。

  10. 调用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侦听器。

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值