天天看點

android html喚醒APP(原生)

寫在前面:有個需求,在微信的公衆号上,通過打開網頁,喚醒已經安裝在手機上的APP,事實上,直接在微信上打開不可行,因為微信對這類喚醒有屏蔽,原因見後文。但是可以通過右上角的在浏覽器中打開進入網頁,再喚醒APP。

附上文中Android被喚醒端源碼位址:

http://download.csdn.net/detail/daijin888888/9295659

首先做成HTML的頁面,頁面内容格式如下:

例如,我的是:scheme://host/datastring

各個項目含義如下所示:

scheme:判别啟動的App。 ※詳細後述

host:适當記述

path:傳值時必須的key     ※沒有也可以

query:擷取值的Key和Value  ※沒有也可以

形成的頁面源碼如下:

<!DOCTYPE html>  
<html>  
<body>  
<a href="scheme://host/datastring" target="_blank" rel="external nofollow" >啟動應用程式</a> 
</body>  
</html> 
           

再将這個頁面内容釋出到伺服器上,擷取在伺服器上通路的位址(區域網路内手機可以通過WiFi接入)

當然你也可以寫另一個原生APP,裡面有個webview加載了這樣的網頁,一樣能喚醒。

這裡提供一個用原生APP的webview喚醒的示例。點選下載下傳

接下來是Android端。

首先在AndroidManifest.xml的MAIN Activity下追加内容,完整标簽如下:

<activity
            android:name="com.example.htmllauncher.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <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:host="host"
                    android:scheme="scheme" />
            </intent-filter>
        </activity>
           

接下來在Activity中需要取值的地方添加以下代碼,我是直接寫在OnCreate函數裡的:

Intent intent = getIntent();

        if (intent != null) {

            String action = intent.getAction();

            String dataString = intent.getDataString();

            if (dataString != null) {

                Toast.makeText(this, dataString, Toast.LENGTH_LONG).show();

            }

        }

這樣就能擷取到URL傳遞過來的值了。

用同一台手機,安裝以上app,再到該手機的微信中,利用微信内置的浏覽器(你可以将之前擷取的頁面在伺服器上的位址發給你的任何聯系人,點選發送的消息即可打開網頁)打開那個簡單的HTML頁面,注意:直接打開scheme://host/datastring是不可行的,微信不會把這串字元解析成網址,必須包裝成網頁才能借助微信的浏覽器打開。進入後就是我們剛剛設計的頁面。

android html喚醒APP(原生)
android html喚醒APP(原生)
android html喚醒APP(原生)

這個時候,直接點選“啟動應用程式”是不會喚醒之前安裝的APP的,因為微信做了屏蔽,你需要在右上角的菜單中選擇“在浏覽器中打開”。這個時候,有些浏覽器就可以喚醒,有些浏覽器則不行,比如筆者測試機MX4上的内置浏覽器不行,UC浏覽器就能喚醒。部分浏覽器不能喚醒,筆者查閱了很多資料也不能徹底解決,如果有讀者有解決方案,敬請留言,多謝!

附文(摘錄):

微信中為什麼無法喚醒App,需要“用浏覽器打開”?

因為微信對所有的分享連接配接做了scheme屏蔽,也就是說分享連接配接中所有對于scheme的調用都被微信封掉了。

那為什麼有些應用是可以喚起的,比如大衆點評,嘀嘀打車?

從非技術角度講,因為大衆點評,嘀嘀打車都是微信的幹兒子,親兒子。對于兒子有特殊照顧。

從技術角度講,微信有一個白名單,對于在白名單中的分享連接配接是不會屏蔽掉scheme調用的。

聽不明白?那我們舉一個例子。

比如大衆點評的分享連接配接是 http://dazhongdianping.share.1.com

對應到微信白名單中就會有   http://dazhongdianping  這一項,

所有源自于這個連接配接的分享,都不會屏蔽scheme,

比如 http://dazhongdianping.share.2.com

http://dazhongdianping.share.3.com

就算是大衆點評的子公司也可以,http://zigongsi.dazhongdianping.share.3.com,

跟域名也在白名單中,是以也可以使用。

到這裡,大家就應該明白,想借用大衆點評的scheme,

繞過這個問題是不可能的,除非你的分享連接配接能挂到大衆點評的根域名上。

這個問題應該解釋清楚了,另外提一句,對于下載下傳 apk 這種,微信是屏蔽任何應用的,對于兒子也不例外,是以你想提供下載下傳連結,無論你是不是兒子,都逃不過使用浏覽器打開之中 low 的方式了