Намерение ACTION_SEND не показывает каждый браузер
У меня есть кнопка, которая вызывает намерение 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. Тем не менее, я хочу позволить пользователю решать, какое приложение браузера использовать для открытия ссылки, но "Добавить в Firefox" кажется единственным вариантом сейчас, когда на этом устройстве, которое я использую, также есть приложения "Chrome" и "Интернет".,
В конечном итоге мне нужна кнопка "Поделиться", и на событии щелчка отображаются все установленные браузерные приложения, такие как Chrome, Firefox, "Интернет" и т. Д., "Копировать в буфер обмена" и любые другие приложения (<- это не необходимо, хотя).
Я хочу показать все приложения браузера и кнопку "Копировать в буфер обмена".
Строка 'WEB_URL' всегда будет правильным URL.
Как мне этого добиться?
РЕДАКТИРОВАТЬ
Подводить итоги:
Я хочу, чтобы список приложений отображался функцией "Intent.createChooser()", список которых состоит из ВСЕХ приложений браузера и опции "Копировать в буфер обмена".
Я попытался использовать Intent.ACTION_VIEW с intent.setData(Uri.parse(url)), но в этом случае у него нет опции "Копировать в буфер".
1 ответ
Решение
После некоторых исследований я смог достичь того, чего хотел выше.
Ключ должен использовать 'Intent.EXTRA_INITIAL_INTENTS' и пользовательское действие.
Событие 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);
}
}