1. 程式人生 > >Android--通過網頁開啟APP並傳值詳解

Android--通過網頁開啟APP並傳值詳解

        本來這篇部落格應該寫Git的,但是由於最近專案比較忙,Git的內容還沒有整理完(因為還有GitLab以及Github的內容),所以先寫了這片部落格總結以下比較零碎的東西。現在正在做商城類四網合一開發,所以從網頁通過連線點選開啟App以及從網頁傳資料到APP便成為必須,因為剛做過在加上內容比較少,所以先做一下總結,以便自己以後做複習,也可以為需要的人提供一些幫助。能力有限,歡迎各位大神多提不同意見進行交流。

       在使用網頁版京東時可以看到就有此功能的實現,而本篇文章主要介紹通過網頁點選連線如果存在此APP則開啟,不存在則下載此APP,而在Google的官方文件中也有相關介紹,該文件給出了兩種從瀏覽器網頁開啟APP的方式:

       第一種:使用者自定義的URI scheme  (Custom URI scheme)         第二種:使用“intent”語法(Intent_based URI)

      好了,廢話不多說進入主題,下面我們使用第一種方式實現該功能。

 使用Custom Scheme URI開啟APP

        就Android平臺而言,URI主要分三個部分:scheme, authority and path。其中authority又分為host和port。格式如下:
scheme://host:port/path
舉個實際的例子:
content://com.example.project:200/folder/subfolder/etc ?arg0=1&arg1=2
\---------/  \---------------------------/ \---/ \--------------------------/ \--------------------------/(query我們要傳的值)
scheme                 host               port        path (我們要傳的值如果是傳多個值使用&)
                \--------------------------------/
                          authority



       1,我們先寫一個簡單的html檔案,使用超連結的方式新增自定義的uri(因為現在自己也正在學習h5,所以能寫的東西不多,湊合者看),我寫的比較多,uri可以簡單些成:<a href="a://b.com/?t1=k&t2=0">

<html>
<meta charset="UTF-8">
   <body>
     <h1>Test Scheme</h1> <!--自動載入隱藏頁面跳轉-->
      <!--手動點選跳轉-->
      <a href="ckck://myProject.com:80/mypath?name=從html頁面傳過來的值之我愛中國">點選開啟APP並將name的值傳過去</a>
   </body>
</html>

    2, 然後需要在想要開啟的App的AndroidManifest.xml檔案中新增過濾器intent-filter,如下圖所示:

要獲得html頁面傳過來的值我們需要在Activity中新增下面的程式碼:

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextView= (TextView) findViewById(R.id.tv_main_show);
        Intent intent = getIntent();
        Uri uri=intent.getData();
        if(uri!=null){
            String name=uri.getQueryParameter("name");
            String scheme= uri.getScheme();
            String host=uri.getHost();
            String port=uri.getPort()+"";
            String path=uri.getPath();
            String query=uri.getQuery();
            mTextView.setText("獲得的資料name="+name+"/r"+"scheme"+scheme+"/r"+"host" +
                    "host"+host+"/r"+"port"+port+"/r"+"path"+path+"/r"+"query"+query);
        }

然後使用手機瀏覽器開啟html檔案就可以開啟手機上的APP並獲取從html頁面傳過來的值:

       

  3,實現通過網頁開啟APP如果手機中沒有此APP就去下載:

時間有限(最近專案比較忙) 至於第二種方式實現該功能以及實現的風險可以參考另一篇部落格,以後有時間了再將其他的內容補上。