android採用Chrome Intent方式實現從瀏覽器啟動應用
阿新 • • 發佈:2019-02-14
在很多應用中需要我們從瀏覽器中直接啟動應用,而網上大多數採用的是scheme的方式,即在啟動activity的mainfest檔案中配置如下欄位:
的方式,具體示例如下。
這樣如果沒有對應應用,該連結就會跳轉到S.browser_fallback_url指定的url上。
然後在啟動activity的onCreate函式中利用bundle接收引數就行了
至此,通過瀏覽器啟動app就大功告成了,但是需要注意的是,很多第三方瀏覽器會攔截掉chrome intent啟動應用的請求,像uc,微信內建瀏覽器,QQ瀏覽器等,在這些頁面要做一個提示,讓使用者跳轉到源生的瀏覽器上才能開啟應用。
<activity android:name=”com.example.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:scheme=”example” android:host=”test” /> </intent-filter> </activity>
然後在網頁的連線設定為example://test/… 來啟動應用,但是如果手機中沒有應用,該url會跳轉到一個錯誤的介面。
google官方在chrome中推出了一種Android Intents的方式來實現應用啟動,通過在iframe中設定src為
intent:HOST/URI-path // Optional host
#Intent;
package=[string];
action=[string];
category=[string];
component=[string];
scheme=[string];
end;
的方式,具體示例如下。
我們定義一個a標籤為
然後在mainfest檔案中定義要啟動的activity<pre name="code" class="html"><pre name="code" class="html"><a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;end">Do Whatever</a>
然後在瀏覽器中點選a標籤,就可以啟動應用程式的對應activity了,如果手機中沒有相應的應用,那麼是否會跳轉到錯誤頁面呢,將a標籤設定為<activity android:name=".TestUrlScheme" > <intent-filter> <action android:name="android.intent.action.VIEW" /><!-- 顯示資料 --> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /><!-- 定義成瀏覽器型別,有URL需要處理時會過濾 --> <data android:scheme="myapp" android:host="whatever" android:path="/" /><!-- 開啟以whatever協議的URL,這個自己隨便定義。 --> </intent-filter> </activity>
<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end">Do Whatever</a>
這樣如果沒有對應應用,該連結就會跳轉到S.browser_fallback_url指定的url上。
如果我們還需要對在a標籤中對指定activity進行傳值呢?那也有辦法,參考stackoverflow上面的一個回答點選開啟連結,將a標籤設定為
<a href="intent://whatever/#Intent;scheme=myapp;package=com.what.ever.myapp;S.name=Perico%20de%20los%20Palotes;I.age=35;end">Do Whatever</a>
其中引數的型別如下String => 'S'
Boolean =>'B'
Byte => 'b'
Character => 'c'
Double => 'd'
Float => 'f'
Integer => 'i'
Long => 'l'
Short => 's'
然後在啟動activity的onCreate函式中利用bundle接收引數就行了
Bundle parametros = getIntent().getExtras();
if (extras != null){
String name = extras.getString("name");
Integer age = extras.getInt("age");
if (name!=null && age!=null)
{
//do whatever you have to
//...
}
}else{
//no extras, get over it!!
}
至此,通過瀏覽器啟動app就大功告成了,但是需要注意的是,很多第三方瀏覽器會攔截掉chrome intent啟動應用的請求,像uc,微信內建瀏覽器,QQ瀏覽器等,在這些頁面要做一個提示,讓使用者跳轉到源生的瀏覽器上才能開啟應用。