gpt4 book ai didi

如果应用程序已通过深层链接打开,Android 深层链接将不起作用

转载 作者:IT王子 更新时间:2023-10-28 23:43:57 26 4
gpt4 key购买 nike

如果应用程序已经通过深层链接打开,则深层链接将不起作用。

但是,如果我不是通过触发深层链接来打开应用程序,例如单击应用程序图标来打开应用程序。然后触发深层链接总是有效的。


这里有详细信息:

所以我在 AndroidManifest 中设置了这样的 Activity ,即 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

测试深层链接。

应用程序被终止后,我使用了上述命令。它可以打开应用程序并路由到正确的 Activity ,没问题。并有以下日志。

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

但是,如果我再次输入相同的命令,而不会终止应用程序。它只会打开应用程序,但不会打开正确的 Activity ,并产生以下日志。

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 在网站上尝试过这个:

intent://dlhost/param#Intent;scheme=dlscheme;package=some.package.name;end

它的行为是一样的。

最佳答案

在项目的 list 文件中,您需要将以下内容添加到您的主要 Activity 中。

android:launchMode="singleTask"

因此,在 list 中,您将拥有类似于以下内容的内容:

<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>

基本上,它的作用是创建一个新任务,并将一个新实例作为根实例推送到该任务。但是,如果任何任务中存在任何 Activity 实例,系统会通过 onNewIntent() 方法调用将 Intent 路由到该 Activity 实例。在这种模式下, Activity 实例可以被推送到同一个任务。并且如果用户在当前activity点击BACK键,系统会将用户返回到上一个activity。

另一方面,在 singleTop 中,如果当前任务的顶部已经存在一个 Activity 实例并且系统将 Intent 路由到该 Activity,则不会创建新实例,因为它会触发一个 onNewIntent() 方法,而不是创建一个新对象。

更多信息可以找到here .

希望这会有所帮助:)

关于如果应用程序已通过深层链接打开,Android 深层链接将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com