如何解决如何使用导航组件创建固定快捷方式?
所以我一直在关注 Chet Haase 的文章。
文章:https://medium.com/androiddevelopers/navigating-with-deep-links-910a4a6588c
在此,他解释了如何使用带有导航组件的深层链接。固定快捷方式构建器需要一个 Intent,但 findNavController 辅助方法返回一个 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
那么,如何创建固定快捷方式?
解决方法
我们使用 URI 创建深层链接,并且 Intent 构造函数的参数之一是 URI。我们可以直接将 URI 传递给构造函数并将活动设置为 MainActity(因为单一活动范式)。
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,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(),pinnedShortcutCallbackIntent,0
)
shortcutManager.requestPinShortcut(
pinShortcutInfo,successCallback.intentSender
)
}
编辑
Android 快捷方式文档:https://developer.android.com/guide/topics/ui/shortcuts/creating-shortcuts
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。