最近,在使用QQ和微信等SDK來實現分享網頁的時候,發現,SDK已經爲頁面跳轉回應用提供了基本的數據支持。咱們只需在應用裏和被分享的網頁進行簡單的設置,便可實現此功能。html
那麼咱們先來看下網頁跳轉回應用的實現原理。java
就Android平臺而言,URI主要分三個部分:scheme, authority and path。其中authority又分爲host和port。格式以下:
scheme://host:port/path
舉個實際的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \---------------------------/ \---/ \--------------------------/
scheme host port path
\--------------------------------/
authority
如今你們應該知道data flag中那些屬性的含義了吧,看下data flag
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
android
如下是測試示例的實現步驟:瀏覽器
1. 新建一個工程A,並實現一個Activity,用來接收外部的跳轉。代碼以下:微信
public class JumpActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Intent intent = getIntent(); String data = intent.getDataString(); System.out.println(data); } }
在這個Activity裏,咱們能夠經過getIntent(),來獲取外部跳轉傳過來的信息。ide
2. 修改ManiFest文件,設置Activity的接收Action的屬性,代碼以下:測試
<activity android:name=".JumpActivity" > <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:scheme="sharetest" android:host="data" /> </intent-filter> </activity>
如上所示,在data裏設置了 scheme和host,則該Activity能夠接收和處理相似於 "sharetest://data/XXX"的連接。spa
3. 接下來咱們能夠寫一個網頁的代碼,因爲瀏覽器在接收到本身不能處理的Uri時,會自動的調用發送Intent來調用可以處理該Uri的應用。code
如下是網頁的代碼:orm
<!DOCTYPE html> <html> <body> <iframe src="sharetest://data/123" style="display:none"></iframe> </body> </html>
4. 在手機瀏覽器裏訪問此頁面,能夠發現:JumpActivity會自動被打開。以下圖所示:在Intent中能夠去到網頁裏發出的連接:sharetest://data/123。
經過以上的4步,相信你們都瞭解如何讓應用接收和處理某種Uri消息。所以,只要咱們
1. 在ManiFest裏爲Activity申明接收並處理某種Uri
2. 在頁面中添加如下代碼:其中,l爲符合Activity處理規則的Uri地址。
<iframe src="l" style="display:none"></iframe>
就能夠讓已安裝該應用的用戶在打開該網頁的時候,自動的跳轉到應用內部。