StupidBeauty
??Read times:262????Posted at:Fri Feb 3 10:13:14 2017?? - no title specified

安卓开发文档翻译:为应用的内容启用深层链接,Enabling Deep Links for App Content

本课程说明的是

  1. 1. 为深层链接添加意图过滤器

  2. 2. 从传入的意图中读取数据

  3. 3. 测试深层链接

妳还应当阅读

  • •. 意图 及意图过滤器

  • •. 允许其它应用启动 妳的活动

让谷歌能够索引 妳的应用中的内容, 且允许用户通过搜索结果进入 到妳的应用中, 就必须 在应用的清单文件中针对对应 的活动添加适当的意图过滤器。 这些意图过滤器, 将允许制造出指向 妳的任意活动中内容的 深层链接 。例如 ,用户 可以点击某个深层链接 在某个购物应用中 查看用户正在搜索 的某个产品的详情页面

为深层链接添加意图过滤器

要想创建一个指向妳的应用中内容的深层链接,则,向清单文件中添加一个意图过滤器,并且要包含以下元素及属性值:

<action>

指定 ACTION_VIEW 这个意图动作,这样,这个意图过滤器就能够通过谷歌搜索访问到了。

<data>

加入 一个或多个 <data> 标记,其中 ,每个标记代表着 一种URI 格式 且解析为某个活动。 <data> 标记 中最少要包含 android:scheme 属性。

妳还可以加入更多的属性,以更精确地定义 该活动接受的URI 类型。例如, 妳可以让多个活动接受相似的URI,但是 ,其中又带有微 小的差别,差别仅在于路径名不同。 在这种情况下,应当使用 android:path 属性 它的各个变种( pathPattern pathPrefix ) 以指定,对于不同的URI 路径,系统应当打开哪个活动。

<category>

包含 BROWSABLE 类型 。必须包含 BROWSABLE 类型, 才能使得这个意图过滤器能够通过浏览器访问到。 不包含这个类型的话, 在浏览器中点击链接是不会被解析到妳的应用的。 DEFAULT 类型 是可选的,但是建议妳加上。 不加上这个类型的话, 该活动就只能使用 妳的应用的部件名来构造显式意图进行启动了。

以下XML 代码片断,展示了, 该如何向清单中加入意图过滤器,以支持深层链接。 example://gizmos” http://www.example.com/gizmos” 两个URI都会解析到这个活动。

<activity

android:name = "com.example.android.GizmosActivity"

android:label = "@string/title_gizmos" >

<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" />

<!-- 接受 以"http://www.example.com/gizmos”开头的 URI -->

<data android:scheme = "http"

android:host = "www.example.com"

android:pathPrefix = "/gizmos" />

<!-- 注意 ,pathPrefix 中必须带上开头的 "/" -->

<!-- 接受 以"example://gizmos”开头的 URI -->

<data android:scheme = "example"

android:host = "gizmos" />

</intent-filter>

</activity>

当妳向清单文件中加入了带URI的意图过滤器,以指向活动 中的内容之后,安卓系统 就能够在运行时将任何带有相匹配URI的意图 Intent 指向 妳的应用。

注意 意图过滤 ,对于每种URI 模式,都只应该包含单个 data 元素 。应当创建多个意图过滤 器来捕获额外 的URI 模式。

欲学习更多关于定义意图过滤器 的知识,则阅读 允许其它应用启动 妳的活动

从传入的意图中读取数据

当系统通过意图过滤器启动了妳的活动之后, 就可以使用 该意图( Intent )提供的数据 来决定该显示什么内容。调用 getData() getAction() 方法来获取到传入意图( Intent )中关联的数据和动作。 妳可以在活动的生命周期中任何时刻调用 这些方法,但是 一般情况下,应当在早期的回调函数中调用这些方法,例如在 onCreate() onStart() 中。

以下代码片断,展示了,如何从意图( Intent )中获取数据:

@Override

public void onCreate ( Bundle savedInstanceState ) {

super . onCreate ( savedInstanceState );

setContentView ( R . layout . main );

Intent intent = getIntent ();

String action = intent . getAction ();

Uri data = intent . getData ();

}

应当遵守以下最佳实践,以提升用户体验:

  • •. 深层链接 ,应当将用户直接带到目标内容页面, 在这个过程中不显示任何提示、空白页或登录界面 要确保,即使用户从来 没有打开过该应用,也能够立即查看 到目标内容。 可以在后续的交互过程中,或者在用户通过桌面启动应用时显示对应的提示内容 这个原则,与网站中的 初次点击免费 体验是等同的。

  • •. 遵守 向后及向上导航 中说明的设计指南, 以确保, 在用户通过深层链接进入 妳的应用之后, 它的行为 满足用户对于向后导航 的预期

测试妳所实现的深层链接

妳可使用 安卓调试桥接 及活动管理器(am)来进行测试, 以验证,妳 在意图过滤器中为深层链接所指定的URI是否能够解析到正确的活动中。 妳可针对某个设备或模拟器来执行adb 命令。

使用adb 来测试意图过滤器URI 的一般语法是:

$ adb shell am start

- W - a android . intent . action . VIEW

- d < URI > < PACKAGE >

例如,以下命令,就尝试启动与指定URI 相关联的目标应用活动。

$ adb shell am start

- W - a android . intent . action . VIEW

- d "example://gizmos" com . example . android

女王娜娜

未知美人

- no title specified

为OsoLinux用户提供的RPM包仓库

 
??Like this article? Give us some tips.??