Несколько методов кода скриншота Android

В Android вы можете использовать следующие методы для захвата скриншотов:

  1. Использование API MediaProjection (требуется уровень API 21 и выше):
    private void takeScreenshot() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
            Intent intent = mediaProjectionManager.createScreenCaptureIntent();
            startActivityForResult(intent, REQUEST_MEDIA_PROJECTION);
        } else {
            // 不支持
        }
    }
    

    В onActivityResultметоде получите MediaProjectionобъект и начните делать скриншоты:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_MEDIA_PROJECTION && resultCode == RESULT_OK) {
            MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
            if (mediaProjection != null) {
                // 创建VirtualDisplay并开始截屏
                VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay(
                        "ScreenCapture",
                        screenWidth,
                        screenHeight,
                        screenDensity,
                        DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                        imageReader.getSurface(),
                        null,
                        null
                );
                // 获取截屏结果
                Image image = imageReader.acquireLatestImage();
                if (image != null) {
                    // 处理截屏结果
                    // ...
                    image.close();
                }
            }
        }
    }
    

  2. Используйте SurfaceView для создания скриншотов:
    private void takeScreenshot() {
        Bitmap bitmap = Bitmap.createBitmap(surfaceView.getWidth(), surfaceView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        surfaceView.draw(canvas);
        // 保存或分享截图
        // ...
    }
    

  3. Используйте drawметод View, чтобы сделать снимок экрана:
    private void takeScreenshot() {
        View view = getWindow().getDecorView().getRootView();
        view.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
        // 保存或分享截图
        // ...
    }
    

    Обратите внимание, что вам необходимо запрашивать соответствующие разрешения при создании снимков экрана и освобождать соответствующие ресурсы в нужное время, чтобы избежать утечек памяти.

おすすめ

転載: blog.csdn.net/YDHIT/article/details/131716457