Как получить EXTRA_CHOSEN_COMPONENT при обратном вызове результата для RememberLauncherForActivityResult?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить EXTRA_CHOSEN_COMPONENT при обратном вызове результата для RememberLauncherForActivityResult?

Сообщение Anonymous »

Я пытаюсь узнать, какое приложение выбрал пользователь после того, как поделился контентом из моего приложения с внешними службами. Код выглядит следующим образом. В основном я следовал руководству Google по получению данных, за исключением использования RememberLauncherForActivityResult вместо BroadcastReceiver.

Код: Выделить всё

val shareResultLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { result ->
val intent: Intent? = result.data
val clickedComponent: ComponentName? = intent?.getParcelableExtra(EXTRA_CHOSEN_COMPONENT);
}

// The below code is executed on click a button
val shareIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_STREAM, cacheUri)
type = "image/jpg"
}
val pendingIntent = PendingIntent.getBroadcast(
context,
0,
Intent(),
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val chooserIntent = Intent.createChooser(shareIntent, null, pendingIntent.intentSender)
shareResultLauncher.launch(chooserIntent)
Однако результаты:
  • Когда я делюсь этим в Slack, намерение равно нулю во-первых.
  • Когда я делюсь им в X (например, в Twitter), намерение существует, но clickedComponent имеет значение null.
Меня беспокоит то, что PendingIntent.FLAG_MUTABLE используется в документе Google, но это неосуществимо [Ссылка]. Их документ кажется устаревшим.

Вместо этого я использую PendingIntent.FLAG_IMMUTABLE, поскольку он необходим, как показывает следующая ошибка.
java.lang.IllegalArgumentException: ${bundle ID}: таргетинг на S+ (версия 31 и выше) требует, чтобы при создании PendingIntent был указан один из FLAG_IMMUTABLE или FLAG_MUTABLE.
Настоятельно рассмотрите возможность использования только FLAG_IMMUTABLE используйте FLAG_MUTABLE, если какая-то функциональность зависит от изменяемости PendingIntent, например. если его необходимо использовать со встроенными ответами или всплывающими подсказками.

После некоторых исследований мне удалось получить некоторую информацию, но она выглядит неправильно. сделать для меня. Чего мне не хватает?

Код: Выделить всё

val shareResultLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { result ->
val intent: Intent? = result.data
val clickedComponent = intent?.getStringExtra("content_view_result:data")
}
Изображение



Подробнее здесь: https://stackoverflow.com/questions/781 ... launcherfo
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»