Screen capturing in Android 10 and newer¶
When building screen sharing application targeted to Android 10 (API level 29) and newer, it is necessary
to launch a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
before requesting permissions to capture screen
private void startScreenCapture() {
mMediaProjectionManager = (MediaProjectionManager) getSystemService(
Context.MEDIA_PROJECTION_SERVICE);
Intent permissionIntent = mMediaProjectionManager.createScreenCaptureIntent();
startService(new Intent(StreamingMinActivity.this, TestService.class));
startActivityForResult(permissionIntent, REQUEST_CODE_CAPTURE_PERM);
}
private void showNotification() {
Intent notificationIntent = new Intent(this, StreamingMinActivity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
int iconId = R.mipmap.ic_launcher;
int uniqueCode = new Random().nextInt(Integer.MAX_VALUE);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(iconId)
.setContentText("Started stream")
.setContentIntent(pendingIntent).build();
startForeground(uniqueCode, notification, FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION);
}