Запустить фрагмент (вместо действия) из ярлыка приложения Android 7.1
Я решил посмотреть на добавление статических ярлыков в приложение, используя эту страницу в качестве ссылки:
https://developer.android.com/preview/shortcuts.html
XML для моих ярлыков в настоящее время выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="id"
android:enabled="true"
android:icon="@drawable/icon"
android:shortcutShortLabel="@string/short_label"
android:shortcutLongLabel="@string/long_label"
android:shortcutDisabledMessage="@string/disabled_message">
<intent
android:action="android.intent.action.VIEW"
android:targetPackage="com.example"
android:targetClass="com.example.Activity" />
<categories android:name="android.shortcut.category" />
</shortcut>
</shortcuts>
Вопрос исходит от targetClass
переменная, так как я не могу найти способ запустить Fragment
а не Activity
, Большинство главных страниц, которые я хотел бы запустить из ярлыков, Fragments
отображается внутри Activity
, Как я могу получить intent
запустить прямо к Fragment
вместо?
3 ответа
Вы можете сделать следующее:
1) В целях, указанных в shortcuts.xml
Установите строку действия с пользовательским намерением:
<intent
android:action="com.your.packagename.custom.name"
android:targetPackage="com.example"
android:targetClass="com.example.Activity" />
2) Проверьте наличие getIntent().getAction()
для умышленного действия в Деятельности, указанной в android:targetClass
:
public void onCreate(Bundle savedInstanceState){
if (CUSTOM_NAME.equals(getIntent().getAction()){
// do Fragment transactions here
}
}
Вы можете легко достичь этого с помощью библиотеки Shortbread.
public class MainActivity extends Activity {
@Shortcut(id = "movies", shortLabel = "Movies", icon = R.drawable.ic_shortcut_movies)
public void showMovies() {
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new MoviesFragment())
.commit();
}
}
добавлять Shortbread.create(this)
в onCreate()
метод вашего Application
или же MainActivity
и вы сделали.
Вы также можете выполнить перенаправление компонента навигации с помощью навигации DeepLink. Цель ярлыка xml будет выглядеть следующим образом:
<intent
android:action="android.intent.action.VIEW"
android:data="<Your deeplink URI, like appname://feature-to-be-names>"
android:targetClass="activity class with package name"
android:targetPackage="application id"/>
И onCreate() -> в действии для обработки навигации по глубоким ссылкам.
intent.dataString?.let {
navHostFragment.findNavController().navigate(Uri.parse(it), false)
}
Это позаботится о множественном ярлыке и перенаправлении.