如何通过深层链接传递数据?

时间:2015-08-08 04:46:03

标签: java android facebook deep-linking

我的应用程序中有一个优惠列表,每个列表项都有一个共享按钮。当任何用户点击共享链接时,我正在使用深层链接打开我的应用程序的优惠详情活动。我在当有人点击链接时我的详细信息页面活动被触发的情况,但我怎么知道,当有人点击共享的深层链接时,会显示详细活动。

3 个答案:

答案 0 :(得分:13)

清单文件将保持与此链接https://developer.android.com/training/app-indexing/deep-linking.html

中指定的相同

但您可以在 www.example.com/gizmos?key=valueToSend

中向用户发送链接中提供额外数据

然后在活动中你可以做类似

的事情
Uri data = intent.getData();

data.getQueryParameter("key");

答案 1 :(得分:1)

假设您为每个项目生成单独的共享链接。您可以发送一些参数和深层链接URL,然后在应用程序中接收它们。任何类型的ID都足够了。 (来源:this

<intent-filter android:label="@string/filter_title_viewgizmos">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
    <data android:scheme="http"
          android:host="www.example.com"
          android:pathPrefix="/gizmos" />
    <!-- note that the leading "/" is required for pathPrefix-->
    <!-- Accepts URIs that begin with "example://gizmos”
    <data android:scheme="example"
          android:host="gizmos" />
    -->
</intent-filter>

举个例子,如果应用程序在这里深层链接,你可以在相应的活动中收到你的意图(这里:com.example.android.GizmosActivity)并从那里提取信息。

答案 2 :(得分:0)

下面的@Vikas回答是一种简化的方法-

应用程序1::该应用程序将通过深度链接将数据发送到另一个应用程序

String deepUrl = "app://anotherapp?key1=value1&key2=value2"; //key1 and key2 for sending data to other application
Intent intent = new Intent (Intent.ACTION_VIEW);
intent.setData (Uri.parse(deepUrl));
startActivity(intent);

这将开始意图以链接的路径参数作为数据将另一个应用程序作为午餐。

现在,我们需要像这样在第二个应用程序中处理相应的链接:

应用程序2的用于处理深层链接的清单文件,将intent filter添加到将处理数据的相应活动中,在我的情况下,MainActivity会这样做

<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:host="anotherapp"
                    android:scheme="app" />
            </intent-filter>
        </activity>

然后在您的活动中,您可以获取如下数据:

 Intent intent = getIntent();
 Uri data = intent.getData();
 String data1= data.getQueryParameter("key1"); // you will get the value "value1" from application 1 
 String data2= data.getQueryParameter("key2");

有关深层链接的更多信息,请参见官方link

注意:如果手机中未安装应用程序2,则您可能会从应用程序1 看到错误ActivityNotFoundException