Android deep link does not work if the app is opened by deep link already(如果应用程序已通过深层链接打开,则Android深层链接不起作用)
问题描述
如果已通过深层链接打开应用,则深层链接不起作用。 然而,如果我不是通过触发深度链接来打开应用程序,比如点击应用程序图标来打开应用程序。则之后触发深度链接将始终起作用。
详情如下:
所以我在androidManifest中将我的活动设置为如下所示,即LaunchActivity。
<activity
android:name="some.package.name.LaunchActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.SomeTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="dlscheme" android:host="dlhost" />
</intent-filter>
</activity>
在LaunchActivity中,我将在onCreate()中打印一个日志,以指示它已经存在。
我使用了
adb shell am start -W -a android.intent.action.VIEW -d "dlscheme://dlhost/param" some.package.name
测试深度链接。
在关闭应用程序后,我使用了上面的命令。它可以打开应用程序并引导到正确的活动,没有问题。 并有以下日志。
adb shell am start -W -a android.intent.action.VIEW -d "dlscheme://dlhost/param" some.package.name
Starting: Intent { act=android.intent.action.VIEW dat=dlscheme://dlhost/param pkg=some.package.name }
Status: ok
Activity: some.package.name/.activity.LaunchActivity
ThisTime: 898
TotalTime: 898
WaitTime: 919
Complete
但是,如果我再次输入相同的命令,而不终止应用程序。
它将只打开应用程序,但不会打开正确的活动,并生成以下日志。
adb shell am start -W -a android.intent.action.VIEW -d "dlscheme://dlhost/param" some.package.name
Starting: Intent { act=android.intent.action.VIEW dat=dlscheme://dlhost/param pkg=some.package.name }
Warning: Activity not started, its current task has been brought to the front
Status: ok
Activity: some.package.name/.activity.LaunchActivity
ThisTime: 0
TotalTime: 0
WaitTime: 6
Complete
加上这一额外行
Warning: Activity not started, its current task has been brought to the front
我实际上也在一个网站上尝试过,使用的是这个Chrome意图:
intent://dlhost/param#Intent;scheme=dlscheme;package=some.package.name;end
和它的行为相同。
推荐答案
在项目的清单文件中,您需要将以下内容添加到主要活动中。
android:launchMode="singleTask"
因此,在清单中,您将看到类似下面的内容:
<activity android:name="some.package.name.LaunchActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.SomeTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="dlscheme" android:host="dlhost" />
</intent-filter>
</activity>
基本上是创建一个新任务,并将一个新实例作为根实例推送到该任务。但是,如果任何任务中存在任何活动实例,系统就会通过onNewIntent()方法调用将意图发送到该活动实例。在此模式下,可以将活动实例推送到同一任务。如果用户单击当前活动中的后退键,系统将使用户返回到上一个活动。
另一方面,在singleTop
中,如果活动的实例已存在于当前任务的顶部,并且系统将意图发送到此活动,则不会创建新实例,因为它将触发onNewIntent()方法,而不是创建新对象。
有关详细信息,请参阅here。
希望这会有帮助:)
这篇关于如果应用程序已通过深层链接打开,则Android深层链接不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如果应用程序已通过深层链接打开,则Android深层链接不起作用
基础教程推荐
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01