我的应用只有两项活动MainActivity
和SecondActivity
。 MainActivity
有一个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。