Android中一个不为人知的功能,可以让您经过Android Intent
直接从网页启动应用程序。一种方案是当用户到达页面时启动应用程序,您能够经过在自定义URI方案设置为src的页面中嵌入iframe来实现,以下所示:<iframe src =“paulsawesomeapp://page1” > </iframe>
。此功能适用于Chrome for Android浏览器,版本18及更早版本。固然,它也工做在Android浏览器。javascript
Chrome(Android版)25
以上版本的功能已略有变化。没法再经过设置iframe
的src
属性来启动Android应用。例如,使用自定义方案(如paulsawesomeapp://
)将iframe
导航到URI,即便用户安装了相应的应用程序,也不会工做。相反,您应该实现经过用户手势自定义方案启动应用程序,或使用本文中描述的intent:
语法。html
最佳实践是构造一个意图锚点并将其嵌入到页面中,以便用户能够启动应用程序。这为您提供了更多的灵活性,以控制如何启动应用程序,包括经过Intent Extras传递额外的信息到应用程序的能力。java
基于意图的URI的基本语法以下:android
intent:
HOST/URI-path // Optional host
#intent;
package = [string];
action = [string];
category = [string];
component = [string];
scheme = [string];
end;复制代码
查看Android源代码来了解解析细节。git
此外,您能够选择经过添加如下字符串来指定回调网址:github
S.browser_fallback_url=[encoded_full_url]复制代码
当没法解析意图或没法启动外部应用程序时,若是给定了回调网址,用户将会被重定向到回调网址。chrome
Chrome不启动外部应用程序的一些示例状况以下:浏览器
JavaScript
计时器试图打开一个没有用户手势的应用程序。注意S.<name>
是一种定义字符串附加的方法。选择S.browser_fallback_url
是为了向后兼容,但目标应用程序不会看到browser_fallback_url
值,Chrome会删除它。安全
这里有一个意图,启动Zxing条码扫描器应用程序。它遵循如下语法:app
intent:
//scan/
#Intent;
package=com.google.zxing.client.android;
scheme=zxing;
end;复制代码
要启动Zxing条形码扫描器应用程序,您须要在锚上对href
进行编码,以下所示:
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a>复制代码
参见Android Zxing Manifest,它定义了包和主机。
此外,若是指定了回调网址,则完整网址将以下所示:
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a>复制代码
如今,若是没法找到应用程序,或者连接是由没有用户手势的JavaScript
触发的(或者咱们不启动外部应用程序的其余状况),则URL
将使您进入zxing.org
。
href = "intent:mydata#Intent;action=myaction;type=text/plain;end"复制代码
从用法上看,仍是很好理解的,这里的代码等价于以下Java代码:
Intent intent = new Intent("myaction");
intent.setData(Uri.parse("mydata"));
intent.setType("text/plain");复制代码
intent://foobar/#Intent;action=myaction;type=text/plain;S.xyz=123;i.abc=678;end复制代码
上面的语句,等价于以下Java代码:
Intent intent = new Intent("myaction");
intent.setData(Uri.pase("//foobar/"));
intent.putExtra("xyz", "123");
intent.putExtra("abc", 678);复制代码
若是经过intent
调用的activity
包含extras
功能,您也应该包括这些extras
功能。
只有具备category filter
的activity
,android.intent.category.BROWSABLE
可以使用此方法调用,由于它表示该应用程序能够安全地从浏览器打开。
在下列状况下,Chrome不会为指定的Intent URI
启动外部应用程序。
Intent URI
从键入的URL重定向时。Intent URI
启动时没有用户手势。