意图ACTION_SEND不会显示每个浏览器

时间:2018-05-24 17:36:35

标签: java android android-intent share

我有一个按钮,当点击如下时触发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,'internet'等,'复制到剪贴板',以及任何其他应用程序(< - 但这些都不是必需的。

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

'WEB_URL'字符串始终是一个正确的URL。

我如何实现这一目标?

修改

总结一下:

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

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

1 个答案:

答案 0 :(得分:0)

<强>解决方案

经过一些研究,我能够达到我想要的目标。

关键是要使用&#39; Intent.EXTRA_INITIAL_INTENTS&#39;和自定义活动。

SomeActivity onClick Click

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

添加&#39; CopyToClipboardActivity&#39;清单

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