Android 經過URL scheme 實現點擊瀏覽器中的URL連接,啓動特定的App,並調轉頁面傳遞參數

點擊瀏覽器中的URL連接,啓動特定的App。html

  1. 首先作成HTML的頁面,頁面內容格式以下:
<a href="[scheme]://[host]/[path]?[query]">啓動應用程序</a>

 

這一句就能夠了。
各個項目含義以下所示:
scheme:判別啓動的App。 ※詳細後述
host:適當記述
path:傳值時必須的key     ※沒有也能夠
query:獲取值的Key和Value  ※沒有也能夠
  1. 做爲測試好好寫了一下,以下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br/> <a href="fyfeng://Panda/test1?name=http://124.200.36.22:8000/test/namelist.json&age=26">打開app</a><br/> <br/> <a href="fyfeng://Panda/test2?name=zhangsan&age=27">打開app1</a><br/> <br/> <a href="fyfeng://Panda/test3?name=zhangsan&age=28">打開app2</a><br/> <br/> </body> </html>

  1. 接下來是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記述的內容加入android

<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>

能夠複製代碼,這樣的話,沒有問題。json

  1. 接下來在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傳遞過來的值了。
我在測試的超連接上添加name的屬性是一個須要請求服務器的URL,這樣的話,咱們能夠經過根據這個URL請求服務器,獲取到一些咱們所須要的數據,這個數據的是以Json的形式存在,經過volley請求下來數據,並使用Gson解析後獲得數據。瀏覽器

public static void getUrlValue(Intent i_getvalue, final String tag, Context context) { String action = i_getvalue.getAction(); if (Intent.ACTION_VIEW.equals(action)) { Uri uri = i_getvalue.getData(); if (uri != null) { mRequestQueue = Volley.newRequestQueue(context); final String name = uri.getQueryParameter("name"); // System.out.print(name); // final String name = "http://124.200.36.22:8000/test/namelist.json"; String age = uri.getQueryParameter("age"); String host = uri.getHost(); String dataString = i_getvalue.getDataString(); String id = uri.getQueryParameter("id"); String path = uri.getPath(); String path1 = uri.getEncodedPath(); String queryString = uri.getQuery(); new Thread(new Runnable() { @Override public void run() { if (name != null) { JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(name.toString().trim(), null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Gson gson = new Gson(); Singersin=gson.fromJson(response.toString(),Singer.class); daytime= sin.getSinger().getDaytime(); order=sin.getSinger().getOrder(); title=sin.getSinger().getTitle(); Log.d("TAG", response.toString()); Log.i(tag, "name:" + name); Log.i(tag, "time:" + daytime); Log.i(tag, "order:" + order); Log.i(tag, "title:" + title); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mRequestQueue.add(jsonObjectRequest); } } }).start(); Log.i(tag, "dataString:" + dataString); Log.i(tag, "id:" + id); Log.i(tag, "path:" + path); Log.i(tag, "path1:" + path1); Log.i(tag, "queryString:" + queryString); Log.i(tag, "name" + name + " age" + age); } } } }

服務器的Json數據bash

{'singer':{'daytime':12,'order':'45','title':'訂單'}}

 

日誌輸出結果:服務器

D/TAG: {"singer":{"daytime":12,"order":"45","title":"訂單"}} name:http://124.200.36.22:8000/test/namelist.json time:12 order:45 title:訂單 path:/test1 path:/test2

demo連接點擊去下載
http://download.csdn.net/detail/jackron2014/9483691markdown

相關文章
相關標籤/搜索