【问题标题】:How to combine ACTION_SEND and ACTION_VIEW intent types?如何组合 ACTION_SEND 和 ACTION_VIEW 意图类型?
【发布时间】:2019-08-14 18:15:04
【问题描述】:

我想分享我的应用程序的 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"));

这会导致在浏览器中打开链接的正常选择器。但没有信息发送应用的选项。

有没有办法“组合”这两种行为,以便两组选项都显示在选择器对话框中?

我也尝试向意图添加类别,但没有成功。

编辑:我偶然发现this question OP 有同样的问题。但是,我想要一个不涉及为我想在选择器中显示的每个应用创建一堆自定义活动的解决方案。

【问题讨论】:

    标签: android android-intent android-app-links


    【解决方案1】:

    我知道这已经晚了,但有一个不同的解决方案: 为发送和查看创建意图。为其中一个创建选择器意图,并将另一个意图作为 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)
    

    【讨论】:

    • 你的想法很棒!
    【解决方案2】:

    我有 kotlin sn-p,我正在与你分享。您可以使用 sharecompact builder。

    ShareCompat.IntentBuilder.from(requireActivity())
                        .setType("text/plain")
                        .setSubject(getString(R.string.app_name))
                        .setChooserTitle("Share via")
                        .setText(your text)
                        .startChooser()
    

    【讨论】:

    • 我尝试了ShareCompat 一点,但没有任何东西能够显示浏览器选项。是否有特定的函数告诉 Android 浏览器可以打开文本?
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2021-03-13
    • 2014-03-18
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多