我有一个按钮,当点击如下时触发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))一起使用,但在这种情况下,它没有“复制到剪贴板”选项。
答案 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);
}
}