【问题标题】:Intent ACTION_SEND doesn't show every browserIntent ACTION_SEND 不会显示每个浏览器
【发布时间】:2023-03-14 07:24:01
【问题描述】:

我有一个按钮,点击时会触发 ACTION_SEND 意图,如下所示:

private static final String WEB_URL = "https://www.google.ca/";

@Override
public void onClick(View v) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    intent.putExtra(Intent.EXTRA_TEXT, WEB_URL);
    intent.setType("text/plain");
    startActivity(Intent.createChooser(intent, "CHOOOOOSE"));
}

目前,它还有一些其他应用程序,“复制到剪贴板”和“添加到 Firefox”,可用于在 Firefox 中打开链接。但是,我想让用户决定使用哪个浏览器应用程序来打开链接,但是当我使用的此设备也有“Chrome”和“Internet”应用程序时,“添加到 Firefox”似乎是目前唯一的选择.

最终,我想要的是一个分享按钮,在点击事件时,它会显示所有已安装的浏览器应用程序,如 chrome、firefox、“互联网”等、“复制到剪贴板”和任何其他应用程序(

显示所有浏览器应用,以及一个“复制到剪贴板”按钮是我真正想要的。

“WEB_URL”字符串始终是正确的 url。

我如何做到这一点?

编辑

总结一下:

我想要一个由“Intent.createChooser()”显示的应用列表,该列表包含所有浏览器应用和一个“复制到剪贴板”选项。

我尝试将 Intent.ACTION_VIEW 与 intent.setData(Uri.parse(url)) 一起使用,但在这种情况下,它没有“复制到剪贴板”选项。

【问题讨论】:

  • 您的意图是打开一个网址或发送纯文本?如果你想重定向到一个 url,你需要在你的意图中使用 Action_View 和 URI。
  • 我想要一个由“Intent.createChooser()”显示的应用程序列表,该列表包含所有浏览器应用程序和一个“复制到剪贴板”选项。我尝试将 Intent.ACTION_VIEW 与 intent.setData(Uri.parse(url)) 一起使用,但在这种情况下,它没有“复制到剪贴板”选项。
  • 我想知道你的意图是什么。你是想复制文本还是打开一个网址?
  • 我的意图是,使用给定的“WEB_URL”,显示“Intent.createChooser()”中的选项以显示浏览器应用程序的图标,以及“复制到剪贴板”的图标。是的,我想复制文本或在用户选择的浏览器中打开一个 url。我想同时拥有这两种能力(复制文本+在浏览器中打开)
  • 你不能在一个 Intent 中同时做这两件事。

标签: java android android-intent share


【解决方案1】:

解决方案

经过一番研究,我能够实现上述我想要的。

关键是使用 'Intent.EXTRA_INITIAL_INTENTS' 和自定义 Activity。

SomeActivity 的 onClick 事件

private static final String WEB_URL = "https://www.google.ca/";

@Override
public void onClick(View v) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(WEB_URL));

    Intent clipboardIntent = new Intent(SomeActivity.this, CopyToClipboardActivity.class);
    clipboardIntent.setData(Uri.parse(WEB_URL));

    Intent chooserIntent = Intent.createChooser(intent, "Custom Title...");
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {clipboardIntent});
    startActivity(chooserIntent);
}

将“CopyToClipboardActivity”添加到清单

<activity android:name=".activities.CopyToClipboardActivity"
    android:exported="false"
    android:icon="@drawable/someIcon"
    android:label="@string/copy_to_clipboard"
    android:theme="@android:style/Theme.NoDisplay"/>

CopyToClipboardActivity.java

public class CopyToClipboardActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri uri = getIntent().getData();
        if (uri != null) {
            copyTextToClipboard(uri.toString());
            Toast.makeText(this, "Link copied to clipboard", Toast.LENGTH_SHORT).show();
        }

        // Finish right away. We don't want to actually display a UI.
        finish();
    }

    private void copyTextToClipboard(String url) {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("URL", url);
        clipboard.setPrimaryClip(clip);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多