Намерение ACTION_SEND не показывает каждый браузер - PullRequest
0 голосов
/ 24 мая 2018

У меня есть кнопка, которая вызывает намерение 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, «Интернет» и т. Д., «Копировать в буфер обмена» и любые другие.apps (<- это не обязательно). </p>

Отображение всех приложений браузера и кнопка ' Копировать в буфер ' - это то, что я по сути хочу.

Строка 'WEB_URL' всегда будет правильным URL.

Как мне этого добиться?

РЕДАКТИРОВАТЬ

Подводя итог:

Я хочу, чтобы список приложений отображался с помощью Intent.createChooser (), чей список состоит из ВСЕХ браузерных приложений И опции «Копировать в буфер».

Я пытался использовать Intent.ACTION_VIEW с intent.setData (Uri.parse (url)), но в этом случае он не имеетвариант «Копировать в буфер обмена».

1 Ответ

0 голосов
/ 24 мая 2018

Решение

Я смог достичь того, что хотел выше, после некоторых исследований.

Ключ в том, чтобы использовать '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' в Manifest

<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.Ява

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