Опция "Поделиться намерением" с помощью ярлыка Android
По умолчанию iOS предоставляет опцию "Поделиться именем приложения" в настройках ярлыков, когда приложение загружается из магазина приложений.
Смотрите изображение ниже:
При щелчке по нему он открывает намерение поделиться на экране самого меню телефона, не перенаправляя его в приложение, где пользователь может поделиться приложением.
Я хочу реализовать это в Android.
Вот что я уже пробовал:
<shortcut
android:shortcutId="share_app"
android:enabled="true"
android:icon="@drawable/ic_cart_active"
android:shortcutShortLabel="@string/shortcut_share"
android:shortcutLongLabel="@string/shortcut_share">
<intent
android:action="android.intent.action.send"
android:targetPackage="com.example.android.internal"
android:targetClass="" />
</shortcut>
Но это не работает, так как я не могу понять, какой должен быть целевой класс здесь.
РЕДАКТИРОВАТЬ: ответ Nilesh почти сработал, но единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что всякий раз, когда я нажимаю на кнопку поделиться с ярлыка, активность запуска отображается на мгновение, а затем показывает средство выбора общего доступа вверх. Теперь, когда я нажимаю кнопку "Домой" с отображением параметров общего доступа, приложение переходит в фоновый режим. Этого не должно быть. Есть идеи, как этого избежать.
2 ответа
Ты можешь использовать App shortcuts
но основное неудобство этого варианта в том, что он доступен из Oreo и выше версии Android
Вот пример кода
Создайте файл ресурса:
res/xml
каталог ( скриншот)
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:enabled="true"
android:icon="@drawable/ic_share"
android:shortcutDisabledMessage="@string/share_app"
android:shortcutId="nilu"
android:shortcutLongLabel="@string/share_app"
android:shortcutShortLabel="@string/share_app">
<intent
android:action="android.intent.action.VIEW"
android:targetClass="neel.com.demo.ShareActivity"
android:targetPackage="neel.com.demo" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
</shortcuts>
Теперь вам нужно зарегистрировать ярлык в файле манифеста под тегом активности
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="neel.com.demo">
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" />
<activity android:name=".ShareActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
</manifest>
Теперь создайте простую акцию, чтобы поделиться ссылкой на приложение.
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class ShareActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,
"Hey check out my app at: https://play.google.com/store/apps/details?id=neel.com.demo");
sendIntent.setType("text/plain");
startActivity(sendIntent);
finish();
}
}
ВЫХОД
Когда пользователь долго нажимает на значок приложения, ваш ярлык будет отображаться как на картинке ниже
после нажатия ярлыка
ОБНОВЛЕНИЕ использовать android:excludeFromRecents="true"
в вашем ShareActivity
<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" />
<activity
android:name=".ShareActivity"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
</application>
Существует два способа создания ярлыка.
Первый: создайте статические ярлыки. В файле манифеста вашего приложения (AndroidManifest.xml) найдите действие, для фильтров намерений которого задано действие android.intent.action.MAIN и категория android.intent.category.LAUNCHER. а затем добавьте элемент к этому действию, который ссылается на файл ресурса, в котором определены ярлыки приложения:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication">
<application ... >
<activity android:name="Main">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
...
два: создать динамические ярлыки, вы можете использовать код для этого, API-интерфейс ShortcutManager позволяет выполнять следующие операции с динамическими ярлыками:
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo shortcut = new ShortcutInfo.Builder(context, "id1")
.setShortLabel("Website")
.setLongLabel("Open the website")
.setIcon(Icon.createWithResource(context, R.drawable.icon_website))
.setIntent(new Intent(Intent.ACTION_VIEW,
Uri.parse("https://www.mysite.example.com/")))
.build();
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
Для получения дополнительной информации вы можете через официальный сайт, как создать ярлык в Android?