OnNewIntent 未调用,而是打开了新的活动实例

Posted

技术标签:

【中文标题】OnNewIntent 未调用,而是打开了新的活动实例【英文标题】:OnNewIntent in not called, Instead new instance of activity is opened 【发布时间】:2021-12-18 16:16:05 【问题描述】:

以下是我的流程

我有一个 BrowserActivity,它在 WebView 中运行一个 Angular 应用程序。

    BrowserActivity通过js方法window.location.href = redirectUrl;打开一个外部网页,这个链接在chrome tab里面打开。我也尝试过打开意图链接,结果相同。 在 chrome 选项卡中完成了一些工作,它为您提供了返回原始应用的链接。 按下该链接后,将启动一个新活动,而不是返回旧活动,这意味着不会调用 onNewIntent。 奇怪的是,如果我在新打开的活动中重复相同的过程,它会调用 neNewIntent 而不是打开新活动。

这是我的 BrowserActivity 清单代码

<activity android:name=".activities.BrowserActivity" android:theme="@style/AppTheme" android:screenOrientation="fullUser" android:launchMode="singleTop">
    <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:host="host.mysite.com" android:scheme="https"/>
        <data android:host="host-dev.mysite.net" android:scheme="https"/>
        <data android:scheme="mysite-host"/>
        <data android:scheme="mysite-callback"/>
    </intent-filter>
</activity>

第一次以以下意图启动 BrowserActivity。

注意:我在这里记录了这个方案。该方案为空。

Intent intent = new Intent(context, BrowserActivity.class);
intent.putExtra(URL, url);
intent.putExtra(TITLE, title);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

第一次 BrowserActivity 加载 'mysite-host://host-dev.mysite.net/link1' 并从浏览器返回时提供以下链接 'mysite-callback:/ /host-dev.mysite.net/link1/login/done'.

我的问题是为什么第一次从浏览器返回时没有触发 onNewIntent。

【问题讨论】:

【参考方案1】:

这是因为 onNewIntent 没有被调用!!!

我把它放在调用这个活动的地方。

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);

那么它的作用就像一个魅力!!。

这是因为调用了新的活动。并且FLAG_ACTIVITY_SINGLE_TOP 使onNewIntent 被调用。这个FLAG_ACTIVITY_SINGLE_TOP 不会启动新的活动。

参考: https://***.com/a/23446196

【讨论】:

嗨@BDSHAH,这可以解决原始问题。但现在有一个新问题。现在它在新实例中首次打开浏览器活动。如何阻止它? 你可以添加标志> Intent.FLAG_ACTIVITY_CLEAR_TASK

以上是关于OnNewIntent 未调用,而是打开了新的活动实例的主要内容,如果未能解决你的问题,请参考以下文章

onNewIntent() 生命周期和注册的监听器

替换 SingleTask 活动中的片段

onNewIntent(intent) 不能正常工作

onNewIntent(intent) 不能正常工作

带有“App”协议深度链接的 SwiftUI macOS 应用程序打开了新的应用程序实例

OnNewIntent() 在推送通知中被多次调用