Перейти к содержанию

Публикация потока с экрана в Android 10 и новее

При сборке приложения, нацеленного на Android 10 (API level 29) и новее, для захвата потока с экрана перед запросом разрешений необходимо запустить сервис типа ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION:

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);
}