Android: неправильный размер изображения в MediaProjection на складном устройстве
МедиаПроекцияСкладной
Возникла проблема с mediaProjection на складных устройствах:
Действия по воспроизведению
- Получите текущую ширину и высоту в действии:
val wmc = WindowMetricsCalculator.getOrCreate()
val bounds = wmc.computeCurrentWindowMetrics(this).bounds
- Запустите службу для 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)
- Создайте 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
)
- Запустите его на складном устройстве. Что мы можем увидеть:
Похоже, изображение имеет неправильный размер и смещение. Кстати: границы в Activity:
Rect(0, 0 - 1148, 2480)
Итак, смещение слева равно 0.
Существует демо-приложение с медиапроекцией и складным API:https://github.com/RPetrov/MediaProjectionFoldable.
Как я могу это исправить? Есть ли какой-нибудь API для использования mediaProjection на складных устройствах?