Android 开发 截屏教程

整体流程

下面是实现 Android 开发截屏功能的整体流程:

步骤 描述
1 获取当前屏幕内容
2 保存屏幕内容到文件
3 在应用中显示截图

具体步骤

步骤1:获取当前屏幕内容

在 Android 中,可以使用 MediaProjectionManagerMediaProjection 类来获取屏幕内容。首先需要在 AndroidManifest.xml 中添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后在 Activity 中获取 MediaProjection

// 获取 MediaProjectionManager
MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
// 开始获取屏幕内容
Intent intent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(intent, REQUEST_CODE_SCREEN_CAPTURE);

步骤2:保存屏幕内容到文件

onActivityResult 中处理获取到的 MediaProjection,并保存当前屏幕内容到文件:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK) {
        MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
        ImageReader imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2);

        VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay("ScreenCapture",
                width, height, dpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                imageReader.getSurface(), null, null);
        imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                Image image = reader.acquireLatestImage();
                // 将 Image 保存到文件
                saveImageToFile(image);
                image.close();
            }
        }, null);
    }
}

步骤3:在应用中显示截图

在需要显示截图的地方加载保存的图片文件即可。

类图

classDiagram
    MediaProjectionManager <|-- MediaProjection
    MediaProjectionManager: getSystemService()
    MediaProjection: createVirtualDisplay()
    ImageReader: newInstance()
    ImageReader: setOnImageAvailableListener()
    ImageReader: acquireLatestImage()

引用形式的描述信息

在 Android 开发中,实现截屏功能可以使用 MediaProjectionManagerMediaProjection 类,通过获取屏幕内容并保存到文件,可以实现在应用中显示截图的功能。以上是具体的步骤和代码实现。希望对你有所帮助!