㈠ android 跨應用間調用: URL Scheme
Android中的自定義的 URL Scheme 是一種頁面內跳轉協議,也可以被稱為 URLRouter ,就是通過類似打開網頁的方式去通過路由打開一個Activity,而非直接通過顯式Intent方式去進行跳轉。這樣隱式intent的方法跳轉好處如下:
上文已經說過, URL Scheme 是就通過類似打開網頁的方式去通過路由打開一個Activity,其協議格式和我們打開網頁輸入的網址類似。
一個完整的完整的URL Scheme協議格式由scheme、host、port、path和query組成,其結構如下所示:
其中scheme既可以是Android中常見的協議,也可以是我們自定義的協議。Android中常見的協議包括content協議、http協議、file協議等,自定義協議可以使用自定義的字元串,當我們啟動第三方的應用時候,多是使用自定義協議。
如下是一個自定義協議的URI:
通過上面的路徑 Scheme、Host、port、path、query全部包含:
URL Scheme 的使用方法簡要言之就是先在manifest中配置能接受Scheme方式啟動的activity;當需要調用時,將Scheme協議的URi以Data的形式加入到Intent中,隱式調用該activity。
1). 在AndroidManifest.xml中對<activity >標簽增加<intent-filter>設置Scheme
上面的設置中可以看到,MainActivity包含多個<intent-filter>設置,第一個是正常的啟動,也就是在應用列表中啟動;第二個是通過 URL Scheme 方式啟動,其本身也是隱式Intent調用的一種,不同在於添加了<data>屬性,定義了其接受 URL Scheme 協議格式為 urlschemel://auth_activity
這里需要說明下, URL Scheme 協議格式中,組成URI的這些屬性在<data >標簽中都是可選的 ,但存在如下的依賴關系:
當我們將intent對象中的Uri參數與intent-filter中的<data>標簽指定的URI格式進行對比時,我們只對比intent-filter的<data>標簽指定的部分,例如:
需要注意的是,intent-filter的<data>標簽在指定path的值時,可以在裡面使用通配符*,起到部分匹配的效果。
2). 使用URL啟動Activity
當然可以在網頁中調用
或者是在JS中調用
3.)如何判斷URL Scheme是否有效
有時候需要把一些輔助性的、較為獨立的APP在Home Launcher中隱藏起來,只允許一些特定的APP調用。這個時候,我們可以利用 URL Scheme 協議來做到這一點,設置AndroidManifest.xml中對<activity >標簽如下
因為Home Launcher列出的應用圖標要求必須有Activity同時滿足
上面的配置中有多餘的category和data限制存在,所以並不匹配,不會在Home Launcher出現,但是可以使用 URL Scheme 來啟動。
這樣就可以將一組APP設置一個統一的入口,然後根據實際需要在調用不同子APP,即所謂的 APP業務組件化 , URL Scheme 在其中有著重要的作用,更進一步討論會在以後的文章中呈現,敬請期待。
參考文獻:
http://blog.csdn.net/iispring/article/details/48481793
http://blog.csdn.net/hb707934728/article/details/53196419
http://www.cnblogs.com/whoislcj/p/5825333.html
㈡ Android頁面跳轉協議_URL Scheme詳解
android中的scheme是一種頁面內跳轉協議,是一種非常好的實現機制,通過定義自己的scheme協議,可以非常方便跳轉app中的各個頁面;通過scheme協議,伺服器可以定製化告訴App跳轉那個頁面,可以通過通知欄消息定製化跳轉頁面,可以通過H5頁面跳轉頁面等。
客戶端應用可以在服務端注冊一個URL Scheme,該Scheme用於從瀏覽器或其他應用啟動本應用。通過指定的URL欄位,可以讓應用在被調起後直接打開某些特定界面,比如商品詳情頁,活動詳情頁等。也可以執行某些特定的動作,如完成支付等。也可以在應用內通過html頁來直接調用顯示app內的某個界面。綜上URL Schema使用場景大致分以下幾種:
一個完整的Scheme的協議格式由 scheme、userInfo、host、port、path、query和fragment 組成。結構如下:
scheme://是固定的格式。userInfo@ 可以省略,host 是必須的。port 、query 和 fragment 也是可以省略的。
其中scheme既可以是Android已經定義好的協議,也可使用我們自定義的。Android 常見的scheme 協議有:content 、file、http 等。如果我們自定義協議就可以隨意使用一些字元串來限定協議。當然最好是有一定含義的字元串。如下面的協議:
首先配置需要跳轉的Activity,Mainifest文件配置如下:
SchemeActivity
在網頁中調用:
運行結果如下:
其他運用方式都基於樣例,源碼地址: URL_SchemeDemo
㈢ android新浪微博支持scheme跳轉嗎
你這個是要實現Html5和原生交互如果是iOS現在了解的主要是解析鏈接的scheme來處理動作;Android1.使用原始的WebView.addJavascriptInterface()的方式添加不過這種方式在Android4.2以下版本有安全漏洞;2.使用第三方庫,這里推薦/lzyzsd/JsBridge這個框架實現的原理和iOS有點類似,但實現了動態添加交互.
㈣ Android模塊化頁面跳轉Scheme
Android模塊化頁面跳轉Scheme
Github
通過註解實現Uri頁面跳轉
支持參數自動解析
使用場景:
1、應用內服務端下發uri進行頁面跳轉
2、通知欄點擊,攜帶uri進行頁面跳轉
3、其他應用通過uri調起進行頁面跳轉
註:activity的註解格式:group/path
group為各個模塊的唯一字元串,不同模塊不可重復
接入:
使用姿勢:
根build.gradle
mole依賴:
使用姿勢:
場景1:應用內服務端下發uri進行頁面跳轉
1、在需要支持uri跳轉的Activity增加註解@SchemePath("{隨意填,唯一字元串}")
2、跳轉事件
註:參數支持
uri支持參數,如" scheme://MoleA/Activity?data=1&time=20200714&hasData=true "
Activity的參數增加@SchemeExtra註解,如
場景2:通知欄點擊,攜帶uri進行頁面跳轉
1、應用首頁Activity增加註解@SchemePath("{隨意填}")
2、application調用初始化
3、啟動頁,通知欄點擊入口
場景三:其他應用通過uri調起進行頁面跳轉
1、注冊中轉activity
㈤ 怎麼在android實現通過瀏覽器點擊鏈接打開apk
點擊瀏覽器中的URL鏈接,啟動特定的App。
首先做成HTML的頁面,頁面內容格式如下:
<a href="[scheme]://[host]/[path]?[query]">啟動應用程序</a>
這一句就可以了。
各個項目含義如下所示:
scheme:判別啟動的App。 ※詳細後述
host:適當記述
path:傳值時必須的key ※沒有也可以
query:獲取值的Key和Value ※沒有也可以
作為測試好好寫了一下,如下:
<a href="myapp://jp.app/openwith?name=zhangsan&age=26">啟動應用程序</a>
接下來是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加以下內容。(啟動Activity時給予)
※必須添加項
<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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
HTML記述的內容加入<data …/>。
其中必須的內容僅scheme,沒有其他內容app也能啟動。
※注意事項:intent-filter的內容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】這2個,不能與這次追加的內容混合。
所以,如果加入了同一個Activity,請按以下這樣做,否則會導致應用圖標在桌面消失等問題。
復制代碼
<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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
復制代碼
這樣的話,沒有問題。
接下來在Activity中需要取值的地方添加以下代碼,我是直接寫在OnCreate函數里的:
Intent i_getvalue = getIntent();
String action = i_getvalue.getAction();
if(Intent.ACTION_VIEW.equals(action)){
Uri uri = i_getvalue.getData();
if(uri != null){
String name = uri.getQueryParameter("name");
String age= uri.getQueryParameter("age");
}
}
這樣就能獲取到URL傳遞過來的值了。
——————————————————————————————————我是分割線————————————————————————————————————
代碼完了,是不是很驚奇的發現用瀏覽器輸入
myapp://jp.app/openwith?name=zhangsan&age=26
是不是404,打不開?
樓主你這不是騙人么!樓主你個混蛋啊。
客官,稍安勿躁啊,你看看你用的瀏覽器是什麼?UC,獵豹,歐朋?放棄吧,試試系統自帶瀏覽器或者谷歌瀏覽器吧。肯定能成功的,不能成功的話再來坑我。哈哈。
——————————————————————————————————我是分割線————————————————————————————————————
突然覺得好悲哀,好不容易get了這個技能,卻不能被第三方瀏覽器使用。在這個android瀏覽器大部分被第三方占據著的時代不得不說是個悲劇啊。
接下來還是說說為什麼第三方瀏覽器不能成功吧。首先,我發現的是UC瀏覽器,如果你使用了自己的scheme,而不是http的話,uc會默認在你的scheme前面添加http://。這太坑爹了。其他瀏覽器沒看是不是同樣的情況。發現這個問題後我就試著把自己的scheme換成http。然後滿懷期待的又跑了一遍,結果還是坑爹了。所以我想會不會是第三方瀏覽器對url做了處理。到這里,我也無可奈何了。我測試了UC,獵豹,歐朋,這3個都不支持。系統自帶的和谷歌瀏覽器是支持的。