Запустить фрагмент (вместо действия) из ярлыка приложения 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)
    }

Это позаботится о множественном ярлыке и перенаправлении.

Другие вопросы по тегам