如何在安卓系统中使用深度链接启动应用程序

18

我想通过使用自己的应用程序启动应用程序,但不是通过提供软件包名称,而是想要打开自定义URL。

我这样做是为了启动一个应用程序。

Intent intent = getPackageManager().getLaunchIntentForPackage(packageInfo.packageName);
startActivity(intent);

是否可以提供深链接而不是软件包名称,例如:

"mobiledeeplinkingprojectdemo://product/123"

参考资料

2个回答

26

你需要定义一个活动,该活动将订阅所需的意图过滤器:

<activity
    android:name="DeepLinkListener"
    android:exported="true" >

    <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"
            android:pathPattern="some regex"
            android:scheme="scheme" />
    </intent-filter>
</activity>

然后在您的 DeepLinkListener 活动的 onCreate 中,您可以访问主机、方案等:

那么您可以通过以下方法在 DeepLinkListener 活动的 onCreate 中访问主机、方案等:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent deepLinkingIntent= getIntent();
    deepLinkingIntent.getScheme();
    deepLinkingIntent.getData().getPath();
}

检查路径,再次触发 Intent 去相应的活动页面。需要更多帮助请参考数据 文档

现在触发一个 Intent

Intent intent = new Intent (Intent.ACTION_VIEW);
intent.setData(Uri.parse(DEEP_LINK_URL));

嘿,谢谢,但有没有一种方法可以在不指定xml文件中的任何内容的情况下完成它?还有,这个deepLinkingIntent是什么? - Kanwal Prakash Singh
如果您知道要启动的活动,为什么不直接通过意图启动它呢? - Gaurav Singla
1
这个答案是在回答问题的相反方面。 - varsha-venkatesh

5

别忘了处理异常。如果没有能够处理深度链接的活动,startActivity将返回一个异常。

    try {
    context.startActivity(
        Intent(Intent.ACTION_VIEW).apply {
            data = Uri.parse(deepLink)
        }
    )
} catch (exception: Exception) {
    Toast.makeText(context, exception.localizedMessage, Toast.LENGTH_LONG).show()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接