點選APP外部連結喚醒APP的研究
有個需求,是點選簡訊中的(或者是其他地方的)URL,能夠喚起APP。
思路,首先找個實現了的APP做測試。
選擇手機淘寶做研究。
在淘寶中把寶貝連結分享到微信,結果如下:
直接點開,跳轉到微信的內建瀏覽器,指示使用者通過瀏覽器開啟:
點選在瀏覽器中開啟,效果為彈窗顯示所有的瀏覽器APP,提示選擇一個瀏覽器。此時使用淘寶開啟即跳轉到APP
把連結內容作為簡訊傳送給自己,點選簡訊中的連結,效果:
1.首先彈出安卓系統預設瀏覽器,展現出寶貝頁面
2.馬上跳轉到淘寶APP內,並展示寶貝
差異:
1.微信使用內建瀏覽器開啟;簡訊一般使用系統瀏覽器開啟。
分析:微信的實現是使用自定義的WebView;系統的實現是指定意圖,並顯示開啟指定的瀏覽器。
2.微信頁面開啟之後,需要選擇開啟的應用;簡訊開啟的頁面可以直接跳轉。
分析:簡訊可以跳轉,不是通過自定義WebView,無法使用JS介面,而且是能通過第三方APP跳轉,一定是通過安卓系統元件實現的跳轉,不是直接跳轉,說明只能攔截系統預設瀏覽器中的URL跳轉操作才能實現跳APP;
微信無法跳轉,猜測可能是對scheme特殊的URL進行了攔截。
查找了資料,可以通過修改manifest來實現一個Activity接收傳遞來的URL:
<activity android:name=".activity.UrlJumpActivity"> <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="http"/> </intent-filter> </activity>
然後自己寫Demo程式。
猜想如果點選web連結能夠跳轉到指定APP,則也能夠實現像淘寶那樣進入系統瀏覽器稍後跳轉到APP。
使用WebView載入自定義的HTML檔案:
將HTML檔案放到APP的asset目錄下面,在啟動後加載HTML:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript"> function showAndroidToast(toast) { javascript:android.showToast(toast); } </script> </head> <body> <input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /> <a href="http://www.baidu.com">open http link</a> </body> </html>
// 1.載入HTML文字
//String htmlText = AssetUtil.getFromAssets(this, "a.html");
//mWebView.loadData(htmlText, "text/html", "utf-8");
// 2.載入asset中的HTML檔案
//mWebView.loadUrl("file:///android_asset/a.html");
// 3.載入外部HTML檔案
mWebView.loadUrl("file:///sdcard/a.html");
幾種方法都能夠成功載入HTML檔案並顯示:
請忽略那個say hello按鈕,點選open http link報錯:
ERROR_UNKNOWN_URL_SCHEME
哪裡有問題?對比淘寶,是用的系統瀏覽器,而我用的WebView,可能系統瀏覽器會額外做一些工作吧,於是使用系統瀏覽器載入這段HTML。
做了各種嘗試:
Intent intent=new Intent();
intent.setAction("android.intent.action.VIEW");
//Uri uri = Uri.parse("content://com.android.htmlfileprovider/sdcard/a.html");
//Uri uri = Uri.parse("file:///android_asset/a.html");
Uri uri = Uri.parse("file:///sdcard/a.html");
//Uri uri = Uri.parse("http://www.qq.com");
intent.setData(uri);
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
其中,第三種方法是可行的:把HTML檔案拷貝到外部儲存,並使用外部儲存檔案的URL傳遞給瀏覽器。
第一種方式原因未知。
第二種使用asset,查詢資料得知:要調起的APP是系統瀏覽器,而載入的檔案卻在我們自己的內部儲存中,系統瀏覽器是無法讀取檔案的,囧。
第四種直接加URL顯然可以,然並卵。
最後一行程式碼有可能無效,如果無效報manifest中未定義BrowserActivity的話則替換為下面程式碼:
intent.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
使用系統瀏覽器開啟外部儲存的HTML檔案後,效果與自定義WebView的顯示效果相同,並且點選連結後,能夠跳轉到我們想要的Activity。
當然,如果我們的H5介面上線了,就不用載入我們自己的HTML檔案了。
總結:
點選外部URL跳轉到自己的APP介面是可行的。
需要在manifest檔案中對目標Activity新增攔截指定的scheme的配置。
web端要做的:與APP定跳轉Activity的私有協議,在頁面中直接觸發此條私有協議,來達到淘寶的效果。
APP端需要做的工作還有:接收web端傳來的引數進行處理。
系統預設瀏覽器無法載入APP內部HTML檔案。
自定義WebView和系統瀏覽器還是有區別的,系統瀏覽器會根據scheme觸發可以響應的安卓元件。
相關推薦
點選APP外部連結喚醒APP的研究
有個需求,是點選簡訊中的(或者是其他地方的)URL,能夠喚起APP。 思路,首先找個實現了的APP做測試。 選擇手機淘寶做研究。 在淘寶中把寶貝連結分享到微信,結果如下: 直接點開,跳轉到微信的內建瀏覽器,指示使用者通過瀏覽器開啟: 點選在瀏覽器中開啟,效果為彈窗顯示所
[Android] 外部連結喚醒App
移動網際網路發展到今天,一個移動app需要和各種各樣的外部連結關聯,它不再僅僅從手機的桌面啟動,更多的將會從其他的應用、瀏覽器連結、簡訊、二維碼或者微信分享等渠道啟動,這裡涉及到的是各種各樣的營銷渠道和方式。 那麼從我們的技術角度來說,我們今天要說明一下的是,從外部連結
只需點選一下即可為網站/APP註冊建立虛假線上身份
你可能經常在各種網站或者APP上註冊賬號,它們大多數都會要求填寫一些私人資訊。這樣,他們就擁有了你的姓名、電子郵件、電話、使用者名稱密碼組合等。 當然,他們可能會向您保證資訊是私密且安全的,但是,你是否經常看到網上報道的XXX網站被攻擊,多少多少資料洩露呢?
網站點選按鈕開啟微信APP
點選a連結直接跳轉到微信APP <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="w
Android 仿QQ退出(點選返回鍵不退出app,點選icon直接進入上次退出的頁面)
在登入頁或者歡迎頁onCreate方法加入如下程式碼: if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_
android網頁調起app並且傳參, 網頁點選高速下載跳轉app
我們有時候需要用到在自己的網站上點選高速下載,然後把引數傳到自己的app裡面進行下載。或者在別人的網站點選下載的時候調起我們的app作為下載器進行下載。那麼具體怎麼實現呢?我們分兩種情況: 一、自己的
Android 6.0 點選跳轉到其他APP,然後立即返回的Bug處理
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); ComponentName cn = am.getRunningTasks(1).get(0
為org.eclipse.swt.widgets.Text 新增可點選的超連結
可以為text, 也可以為label 新增可以點選的超連結。 程式碼如下: package us63740.parts; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import jav
Linux操作入門練習之shell指令碼附答案(點選文末連結)
資料共享與整合技術 練習5 1、編寫shell指令碼,計算1-100的和; 指令碼: 結果驗證: 2、將一目錄下所有檔案的副檔名改為bak 指令碼: 驗證; 3、寫一個指令碼,統計/etc目錄下共有多少個目錄檔案 驗證: 4、寫一個指令碼, 依次向/etc/p
webbrowser點選網頁內部連結阻止從IE開啟
使用mfc webbrowser控制元件載入的網頁,如果點選網頁內部連結時,總是自動使用IE瀏覽器開啟新連結網頁,那麼,該如何阻止IE開啟新連結,而是用webbrowser控制元件開啟網頁連結了。 在這裡有一種很簡單的方法,為webbrowser控制元件新增NewWindow3訊息響應 在
UILabel點選實現超連結
為了例項化咱們的Label時必須做點啥.. 先來個協議. .h檔案複製程式碼 #import <Foundation/Foundation.h> @class MyLabel; @
點選WordPress後臺連結出現404錯誤,所有URL少/wp-admin/ 目錄
剛才幫一個朋友跟我講wordpress後臺不管點什麼都會出現404,解決辦法也很簡單。 預設的nginx的wordpress偽靜態是 location / { if (-f $request_filename/index.html){ r
jsp 模擬按鈕,點選button,連結到a標籤,是a標籤的地址跳轉
<button id="btn"></button><a href="www.baidu.com" id="link">link</a><script>document.getElementById("btn").
微信點選圖文訊息連結 先跳空白頁 再跳目標頁android
今天做微信開發遇到了個問題噁心了一下午終於解決了。 問題是這樣的:有一個多圖文訊息,然後每個圖文訊息都是一個連結, 例如A連結,當點選A連結時在Android系統會先跳一個空白頁之後再跳轉到目的頁B,在IOS不會有這個問題, 最終發現原因是這樣的: 比如B頁的連結是"htt
點選popupwindow外部區域,點選事件的響應問題
點選外部消失,點選外部其他控制元件不觸發其他事件 // 設定此引數獲得焦點,否則無法點選 pop.setFocusable(true); 2.點選按鈕彈出彈框,點選外部
android 點選分享的連結跳轉到應用程式
我們時常會遇到這種需求,點選一個連結跳轉到我們的應用程式當中。 (點選一個連結跳轉到一個下載apk的html,這是沒有安裝這個apk的情況,如果安裝了可以直接跳轉到我們的apk應用當中) 如果需要帶入資料過去只需在連結的網址上加入引數即可例如: <a href="ht
js將文字中的url替換成可點選的超連結
window.onload=function(){ var div = document.getElementById("content"); var s=div.innerHTML; var re = /(http:\/\/[\w.\/]+)(?!
同一jsp頁面實現點選左邊不同連結右邊顯示詳情資訊,解決區域性重新整理
一、此需求可解決區域性重新整理,例如左邊連結直接去後臺返回新的jsp頁面,同時把頁面需要的資料返回。頁面中直接獲取就ok <html> <head> <me
點選EditText外部輸入法關閉的方法
對經常用到的方法做一個記錄 Android開發常用到點EditText外部需要隱藏輸入法下面是解決辦法: 將程式碼複製到基類Activity中並引入相應的包即可一勞永逸 @Override public boolean dispatchT
使用YYText-文字藍色文字點選實現超連結跳轉
NSString *text = @"唐寅,生於成化六年二月初四,卒於嘉靖二年十二月二日,字伯虎,後改字子畏,號六如居士、桃花庵主、魯國唐生、逃禪仙吏等,明代畫家、書法家、詩人。"; NSMutableAttributedString *one = [[NSMutableA