Реализовать Share App Facility в статических ярлыках - PullRequest
0 голосов
/ 17 февраля 2019

Я пытался реализовать функцию «Поделиться приложением» как ярлык приложения в Android (например, на платформе iOS).Эта возможность должна существовать сразу после установки, даже не открывая приложение.Я хочу знать, как я могу использовать это намерение в файле ярлыка XML:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, "https://www.example.com");
        intent.setType("text/plain");

1 Ответ

0 голосов
/ 04 марта 2019

Я не нашел способа вставить атрибут type для намерения в xml.Но кажется, что деятельность с невидимой темой может имитировать то, что я хочу.

Как сказано в документации :

Начать одно действие с другого

Статические ярлыки не могут иметь пользовательских флагов намерений.В первом назначении статического ярлыка всегда будут установлены Intent.FLAG_ACTIVITY_NEW_TASK и Intent.FLAG_ACTIVITY_CLEAR_TASK.Это означает, что когда приложение уже запущено, все существующие действия в нем будут уничтожены при запуске статического ярлыка.Если это поведение нежелательно, вы можете использовать батутное действие или невидимое действие, которое запускает другое действие в Activity.onCreate (Bundle), а затем вызывает Activity.finish ():

В файле AndroidManifest.xmlбатутная активность должна включать в себя назначение атрибута android: taskAffinity = "".В файле ресурсов ярлыков намерение в статическом ярлыке должно ссылаться на действие батута.Для получения дополнительной информации о действиях на батуте, прочитайте Запуск одного занятия из другого.

мы можем добавить android:taskAffinity="" в файл InvisibleActivity в manifest, чтобы приложение не переходило в фоновый режим при нажатии кнопки home.

Это моя настройка невидимой активности в AndroidManifest.xml

<activity
    android:name=".InvisibleActivity"
    android:excludeFromRecents="true"
    android:taskAffinity=""
    android:noHistory="true"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />

Это целый метод onCreate() в моей невидимой деятельности:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "https://www.example.com");
    sendIntent.setType("text/plain");
    startActivity(sendIntent);
    finish();
}

и, наконец, этомой статический ярлык xml-файла:

<shortcut
    android:enabled="true"
    android:shortcutId="share_app_shortcut"
    android:icon="@drawable/ic_share"
    android:shortcutShortLabel="@string/shortcut_share_description">

    <intent
        android:action="android.intent.action.VIEW"
        android:targetClass=".InvisibleActivity"
        android:targetPackage="com.example.shortcut">
    </intent>

</shortcut>
...