我们使用 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