31 Grabber(QAndroidScreenCapture & screenCapture)
32 : m_activityRequestCode(REQUEST_CODE_MEDIA_PROJECTION + idCounter.fetchAndAddRelaxed(1))
33 , m_screenCapture(screenCapture)
35 using namespace QtJniTypes;
36 const auto sizeObj = QtScreenGrabber::callStaticMethod<Size>(
37 "getScreenCaptureSize", QtAndroidPrivate::activity());
38 const QSize size = QSize(sizeObj.callMethod<
int>(
"getWidth"),
39 sizeObj.callMethod<
int>(
"getHeight"));
40 m_format = QVideoFrameFormat(size, QVideoFrameFormat::Format_RGBA8888);
42 if (m_format.frameHeight() > 0 && m_format.frameWidth() > 0) {
43 QtAndroidPrivate::registerActivityResultListener(
this);
44 m_jniGrabber = QtScreenGrabber(QtAndroidPrivate::activity(), m_activityRequestCode);
46 updateError(QStringLiteral(
"Invalid Screen size: %1x%2. Screen capture not started")
47 .arg(m_format.frameHeight())
48 .arg(m_format.frameWidth()));
52 bool handleActivityResult(jint requestCode, jint resultCode, jobject data) override
54 if (requestCode != m_activityRequestCode || m_jniGrabber ==
nullptr)
57 if (resultCode == RESULT_OK) {
58 const QtJniTypes::Intent intent(data);
59 const bool screenCaptureServiceStarted = m_jniGrabber.callMethod<
bool>(
60 "startScreenCaptureService",
62 reinterpret_cast<jlong>(&m_screenCapture),
63 m_format.frameWidth(),
64 m_format.frameHeight(),
66 if (!screenCaptureServiceStarted)
67 updateError(QStringLiteral(
"Cannot start screen capture service"));
68 }
else if (resultCode == RESULT_CANCEL) {
69 updateError(QStringLiteral(
"Screen capture canceled"));