Намерение 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);
    }
}
Другие вопросы по тегам