【问题标题】:How to create pinned shortcut with navigation components?如何使用导航组件创建固定快捷方式?
【发布时间】:2021-05-26 12:26:01
【问题描述】:

所以我一直在关注 Chet Haase 的文章。

文章:https://medium.com/androiddevelopers/navigating-with-deep-links-910a4a6588c

在此,他解释了如何使用导航组件处理深层链接。固定的快捷方式构建器需要一个 Intent,但 findNavController 辅助方法返回一个 PendingIntent 对象。

文章中获取pendingIntent的方法。

 val pendingIntent = navController
        .createDeepLink()
        .setDestination(R.id.donutEntryDialogFragment)
        .setArguments(arg)
        .createPendingIntent()

ShortcutInfoBuilder 方法

val pinShortcutBuilder = ShortcutInfo.Builder(
                              requireContext(),
                              "id"
                              )
pinShortcutBuilder
     .setShortLabel("someLabel")
     .setIntent(intent)  // takes an object of Intent

那么,如何创建固定快捷方式?

【问题讨论】:

    标签: android android-jetpack android-architecture-navigation android-deep-link android-shortcut


    【解决方案1】:

    我们使用 URI 创建深层链接,而 Intent 构造函数的参数之一是 URI。我们可以直接将 URI 传递给构造函数,并将 Activity 设置为 MainActity(因为单 Activity 范式)。

    val intent = Intent(
                          Intent.ACTION_VIEW,
                          "myapp://navdonutcreator.com/donutcreator".toUri(),
                          requireContext(),
                          MainActivity::class.java
                        )
    

    现在在您要打开的片段中使用相同的 URI。

    <fragment
        android:id="@+id/targetFragment"
        android:name="com.example.myapp.ui.TargetFragment"
        tools:layout="@layout/fragment_target">
        <deepLink
            android:id="@+id/deepLink"
            app:uri="myapp://navdonutcreator.com/donutcreator" />
    </fragment>
    

    现在把所有东西都缝合起来,

     val shortcutManager = ContextCompat.getSystemService(
                            requireContext(),
                            ShortcutManager::class.java
                        )
    
                        if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported) {
    
                            val intent = Intent(
                                Intent.ACTION_VIEW,
                                "myapp://navdonutcreator.com/donutcreator".toUri(),
                                requireContext(),
                                MainActivity::class.java
                            )
    
                            val pinShortcutBuilder =
                                ShortcutInfo.Builder(
                                    requireContext(),
                                    "someId"
                                )
                            pinShortcutBuilder.setShortLabel("someLabel)
                                .setIntent(intent)
    
                            val pinShortcutInfo = pinShortcutBuilder.build()
    
                            // Create the PendingIntent object only if your app needs to be notified
                            // that the user allowed the shortcut to be pinned. Note that, if the
                            // pinning operation fails, your app isn't notified. We assume here that the
                            // app has implemented a method called createShortcutResultIntent() that
                            // returns a broadcast intent.
                            val pinnedShortcutCallbackIntent =
                                shortcutManager.createShortcutResultIntent(pinShortcutInfo)
    
                            // Configure the intent so that your app's broadcast receiver gets
                            // the callback successfully.For details, see PendingIntent.getBroadcast().
                            val successCallback = PendingIntent.getBroadcast(
                                requireContext(), 0,
                                pinnedShortcutCallbackIntent, 0
                            )
    
                            shortcutManager.requestPinShortcut(
                                pinShortcutInfo,
                                successCallback.intentSender
                            )
                        }
    

    编辑

    Android 快捷方式文档:https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts

    【讨论】:

      猜你喜欢
      • 2022-10-09
      • 2012-06-30
      • 2019-10-02
      • 2012-03-30
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      相关资源
      最近更新 更多