我有一个应用程序,需要在不同的启动类型上执行不同的任务。当我的应用程序处于后台时,如何检测该应用程序是否由deeplink启动。
当单击的链接或编程请求调用Web URI意图时,Android系统将按顺序尝试以下每个操作,直到请求成功:
如果指定了用户首选的可处理URI的应用,请打开它。打开唯一可以处理URI的应用程序。允许用户从对话框中选择一个应用程序。
要创建指向您的应用程序内容的链接,请在清单中添加一个包含以下元素和属性值的意图过滤器:
https://developer.android.com/training/app-links/deep-linking
查看Android官方文档以了解有关深层链接的更多信息
假设您已经准备好具有所需意图的活动,您要做的就是检查活动的if(getIntent().getAction() != null)
,这表示该活动是通过深层链接启动的。用于导航的普通意图将返回null
。
[现在的问题是,如果您的活动已经在后台运行,并且您在onCreate()
中编写了此代码,并且深层链接的活动被设置为android:launchMode="singleTask"
或使用FLAG_ACTIVITY_SINGLE_TOP
启动,则它将不会再次触发。
为此,您将必须重写活动的onNewIntent(Intent intent)
方法,这样,您每次从意图启动活动时就可以知道。同样,您可以在此处检查if(intent.getAction() != null)
和intent.getData()
以检索数据。
要注意的一件事是避免在onCreate
和onNewIntent
中两次运行相同的代码
如果您尚未在应用中实现深层链接,但首先需要使用<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:host="www.example.com" android:pathPattern="/.*" android:scheme="https" /> </intent-filter>
您可能已经有人建议,可以在官方文档here上了解更多信息。
希望这对您有所帮助。如上所述,目前正在我的应用程序中实现它。如果任何人有任何更正/建议,请这样做。