Android应用中的深层链接

时间:2015-12-16 17:24:27

标签: android deep-linking

我正在尝试在我的应用中启用深层链接。以下是我在AndroidManifest中运行的代码来实现它:

<activity
    android:name=".ui.WalletActivity"
    android:label="@string/title_activity_wallet">
    <intent-filter android:label="@string/title_activity_link_wallet" >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="wallet" 
        />
    </intent-filter>
</activity>

为了点击myapp://wallet打开我的应用的WalletActivity,我还需要做些什么吗?

2 个答案:

答案 0 :(得分:1)

在我的应用中,这很好用:

    <activity
       android:name=".ui.WalletActivity"
       android:label="@string/title_activity_wallet">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
       <intent-filter>
            <data android:scheme="myapp" android:host="wallet" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

我还有额外的参数(myapp:// wallet?id = 42),我这样解析:

    Intent intent = getIntent();
    String providerUrl = intent.getData().toString();
    UrlQuerySanitizer sanitizer = new UrlQuerySanitizer();
    sanitizer.setAllowUnregisteredParamaters(true);
    sanitizer.parseUrl(providerUrl);
    String id = sanitizer.getValue("id");

(您可以阅读UrlQuerySanitizer here

为了测试,我建议通过电子邮件将myapp:// wallet链接发送给自己,例如:-)(或adb,如评论中所述)

答案 1 :(得分:0)

要测试并确保您的意图有效,您可以按deep linking docs

中的建议使用adb命令

要在uri中传递参数,只需将它们添加为普通查询参数(即example://gizmos/path?key=value),然后通过解析意图数据来检索它们:

    Uri uri = getIntent().getData();
    String value = uri.getQueryParameter("key");

确保检查空值等。