Как объединить типы намерений ACTION_SEND и ACTION_VIEW?

Я хотел бы поделиться URI из моего приложения, и в диалоговом окне выбора приложения отображаются параметры для приложений ACTION_SEND (таких как SMS и копирование в буфер обмена), а также приложений ACTION_VIEW (например, Chrome). Пока что я могу показывать только один набор приложений за раз. Есть ли способ объединить намеренные действия?

Вот как выглядит простое намерение ACTION_SEND:

Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, "www.example.com");
context.startActivity(Intent.createChooser(i, "Share"));

Это приводит к обычному выбору приложений, которые отправляют информацию. Но нет открытых в настройках браузера.

Вот как выглядит намерение ACTION_VIEW:

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.putData(Uri.parse("www.example.com"))
context.startActivity(Intent.createChooser(i, "Share"));

Это приводит к нормальному выбору для открытия ссылки в браузере. Но нет вариантов для отправки информации приложений.

Есть ли способ "объединить" эти два поведения, чтобы оба набора параметров отображались в диалоге выбора?

Я также пытался добавить категории к цели, но не повезло.

РЕДАКТИРОВАТЬ: я наткнулся на этот вопрос, где ОП имеет ту же проблему. Тем не менее, я хотел бы получить решение, которое не включает создание набора пользовательских действий для каждого приложения, которое я хотел бы показать в окне выбора.

2 ответа

Я знаю, что уже поздно, но у меня есть другое решение: создать намерения для отправки и просмотра. Создайте намерение выбора для одного из них и передайте другое намерение как Intent.EXTRA_INITIAL_INTENTS. Как это:

      // Share
val sendIntent = Intent(Intent.ACTION_SEND)
sendIntent.setDataAndType(uri, MIME_PDF_TYPE)
sendIntent.putExtra(Intent.EXTRA_TEXT, "TEST")
sendIntent.putExtra(Intent.EXTRA_STREA, uri)
    
// Open
val openIntent = Intent(Intent.ACTION_VIEW)
openIntent.setDataAndType(uri, MIME_PDF_TYPE)
openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    
    
val chooserIntent = Intent.createChooser(sendIntent,activity.getString(R.string.sharing_title))
    
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(openIntent))
    
activity.startActivity(chooserIntent)

У меня есть фрагмент kotlin, и я делюсь с вами. Вы можете использовать Sharecompact Builder.

ShareCompat.IntentBuilder.from(requireActivity())
                    .setType("text/plain")
                    .setSubject(getString(R.string.app_name))
                    .setChooserTitle("Share via")
                    .setText(your text)
                    .startChooser()
Другие вопросы по тегам