Android: неправильный размер изображения в MediaProjection на складном устройстве

МедиаПроекцияСкладной

Возникла проблема с mediaProjection на складных устройствах:

Действия по воспроизведению

  1. Получите текущую ширину и высоту в действии:
         val wmc = WindowMetricsCalculator.getOrCreate()
   val bounds = wmc.computeCurrentWindowMetrics(this).bounds
  1. Запустите службу для mediaProjection:
         val wmc = WindowMetricsCalculator.getOrCreate()
   val bounds = wmc.computeCurrentWindowMetrics(this).bounds

   val intent = Intent(this, ScreenCaptureService::class.java)
   intent.putExtra("RESULT_CODE", resultCode)
   intent.putExtra("DATA", data)
   intent.putExtra("W", bounds.width())
   intent.putExtra("H", bounds.height())
   startService(intent)

  1. Создайте ScreenCaptureService с помощью mediaProjection:
         val mediaProjectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager

        width = intent.getIntExtra("W", 0)
        height = intent.getIntExtra("H", 0)

        imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2)
        imageReader!!.setOnImageAvailableListener({
            // save iamge!
        }, mHandler)

        mediaProjection = mediaProjectionManager.getMediaProjection(...)


        virtualDisplay = mediaProjection!!.createVirtualDisplay(
            "ScreenCapture",
            width,
            height,
            Resources.getSystem().displayMetrics.densityDpi,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY or DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
            imageReader!!.surface,
            null, null
        )
  1. Запустите его на складном устройстве. Что мы можем увидеть:

Похоже, изображение имеет неправильный размер и смещение. Кстати: границы в Activity:

      Rect(0, 0 - 1148, 2480)

Итак, смещение слева равно 0.

Существует демо-приложение с медиапроекцией и складным API:https://github.com/RPetrov/MediaProjectionFoldable.

Как я могу это исправить? Есть ли какой-нибудь API для использования mediaProjection на складных устройствах?

0 ответов

Другие вопросы по тегам