Android Intents with Chrome
Android中一個鮮為人知的功能,可讓您通過Android Intent
直接從網頁啟動應用程式。一種方案是當使用者到達頁面時啟動應用程式,您可以通過在自定義URI方案設定為src的頁面中嵌入iframe來實現,如下所示:<iframe src =“paulsawesomeapp://page1” > </iframe>
。此功能適用於Chrome for Android瀏覽器,版本18及更早版本。當然,它也工作在Android瀏覽器。
Chrome(Android版)25
以上版本的功能已略有變化。無法再通過設定iframe
的src
屬性來啟動Android應用。例如,使用自定義方案(如paulsawesomeapp://
)將iframe
導航到URI,即使使用者安裝了相應的應用程式,也不會工作。相反,您應該實現通過使用者手勢自定義方案啟動應用程式,或使用本文中描述的intent:
語法。
語法
最佳實踐是構造一個意圖錨點並將其嵌入到頁面中,以便使用者可以啟動應用程式。這為您提供了更多的靈活性,以控制如何啟動應用程式,包括通過Intent Extras傳遞額外的資訊到應用程式的能力。
基於意圖的URI的基本語法如下:
intent:
HOST/URI-path // Optional host
#intent;
package = [string];
action = [string];
category = [string];
component = [string];
scheme = [string];
end;複製程式碼
檢視Android原始碼來了解解析細節。
此外,您可以選擇通過新增以下字串來指定回撥網址:
S.browser_fallback_url=[encoded_full_url]複製程式碼
當無法解析意圖或無法啟動外部應用程式時,如果給定了回撥網址,使用者將會被重定向到回撥網址。
Chrome不啟動外部應用程式的一些示例情況如下:
- 無法解析意圖,即沒有應用程式可以處理意圖。
JavaScript
計時器試圖開啟一個沒有使用者手勢的應用程式。
注意S.<name>
是一種定義字串附加的方法。選擇S.browser_fallback_url
是為了向後相容,但目標應用程式不會看到browser_fallback_url
值,Chrome會刪除它。
例子
這裡有一個意圖,啟動Zxing條碼掃描器應用程式。它遵循以下語法:
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
啟動時沒有使用者手勢。