两次打开相同的URI时,onCreate()和onNewIntent()都不会触发

时间:2015-09-15 21:44:56

标签: android android-intent

我的应用只有两项活动MainActivitySecondActivityMainActivity有一个intent-filter,以便处理一组特定的深层链接网址:

<activity android:name=".MainActivity">
    ...
    <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="http" android:host="example.com" android:pathPrefix="/link" />
    </intent-filter>

当收到包含ACTION_VIEW和uri的意图时,我想根据完整的网址重定向到SecondActivity。因此,在onCreate()onNewIntent()中,我称之为:

private void handleIntent(Intent intent) {
    if (Intent.ACTION_VIEW.equalsIgnoreCase(intent.getAction()) && intent.getData() != null) {
        if (intent.getData().toString().contains("/link/")) {
            startActivity(new Intent(Intent.ACTION_VIEW, intent.getData(), this, SecondActivity.class));
        }
    }
}

然后,我通过添加一些指向电子邮件的链接(例如http://example.com/link1/one并点击它们来测试此代码。我注意到的问题如下:

当我点击链接时,MainActivity.onCreate()被正确触发,并且SecondActivity被调用。如果我再次单击相同(或另一个)链接,那么一切正常。 但是,如果我从SecondActivity返回MainActivity,那么点击相同的链接就不会执行我的代码 - 应用程序会被带回到前面,而不是其他任何内容。不会调用onCreate()onNewIntent()

只有当Android假定声明intent-filter的Activity是显示URI内容的Activity时,这似乎才是正确的行为。但是,在这种情况下,它不是,我还没有办法解决它。

虽然这是一种特殊情况,但如果Activity根据URI显示不同的片段,则会出现类似的情况。如果我稍后在同一个Activity中替换那个片段,那么点击URL应该重新调用Intent,这样原来的片段就可以再次显示 - 但这不会发生。

有没有办法再次收到此意图?由于应用程序的结构方式,我不能将意图过滤器放在子活动本身上(实际上,大多数时候它们都是片段,如上所述上述)也未将其中任何一项声明为singleTop(因为它们在其他地方被重复使用)。

FWIW,完整的应用程序代码可用here

0 个答案:

没有答案