Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android實現通過浏覽器點擊鏈接打開本地應用(APP)並拿到浏覽器傳遞的數據

Android實現通過浏覽器點擊鏈接打開本地應用(APP)並拿到浏覽器傳遞的數據

編輯:關於Android編程

點擊浏覽器中的URL鏈接,啟動特定的App。

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

啟動應用程序 

這一句就可以了。

各個項目含義如下所示:

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

host:適當記述

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

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

作為測試好好寫了一下,如下:

啟動應用程序  

接下來是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加以下內容。(啟動Activity時給予)

※必須添加項

  
      
      
      
      

HTML記述的內容加入
其中必須的內容僅scheme,沒有其他內容app也能啟動。

※注意事項:intent-filter的內容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】這2個,不能與這次追加的內容混合。
所以,如果加入了同一個Activity,請按以下這樣做,否則會導致應用圖標在桌面消失等問題。

  
      
      
  
  
      
      
      
      
 

這樣的話,沒有問題。

接下來在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傳遞過來的值了。

——————————————————————————————————我是分割線————————————————————————————————————

代碼copy完了,是不是很驚奇的發現用浏覽器輸入

myapp://jp.app/openwith?name=zhangsan&age=26

是不是404,打不開?

樓主你這不是騙人麼!樓主你個混蛋啊。

客官,稍安勿躁啊,你看看你用的浏覽器是什麼?UC,獵豹,歐朋?放棄吧,試試系統自帶浏覽器或者谷歌浏覽器吧。肯定能成功的,不能成功的話再來坑我。哈哈。


——————————————————————————————————我是分割線————————————————————————————————————

突然覺得好悲哀,好不容易get了這個技能,卻不能被第三方浏覽器使用。在這個android浏覽器大部分被第三方占據著的時代不得不說是個悲劇啊。

接下來還是說說為什麼第三方浏覽器不能成功吧。首先,我發現的是UC浏覽器,如果你使用了自己的scheme,而不是http的話,uc會默認在你的scheme前面添加http://。這太坑爹了。其他浏覽器沒看是不是同樣的情況。發現這個問題後我就試著把自己的scheme換成http。然後滿懷期待的又跑了一遍,結果還是坑爹了。所以我想會不會是第三方浏覽器對url做了處理。到這裡,我也無可奈何了。我測試了UC,獵豹,歐朋,這3個都不支持。系統自帶的和谷歌浏覽器是支持的。

最後再補充個線索吧,在浏覽器裡搜索百度應用。進了他們的頁面後,他們是可以實現在各種浏覽器啟動已經安裝好的本地app的。看到這個後我就看了下他們頁面的源碼。

\

\

在這裡他們頁面添加了個data-sentintent的標簽,看到這裡,應該能確定第三方浏覽器應該是默認都不支持發intent的,只能自己起一個。根據前端說,這個標簽應該是自定義的。我們前端看源碼的時候發現是這樣的

\

vcnPPGEgdGFyZ2V0PQ=="_blank" target="_blank" href="http://stackoverflow.com/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app">stackoverflow兩個相關鏈接:http://stackoverflow.com/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app

http://stackoverflow.com/questions/2958701/launch-custom-android-application-from-android-browser

最近遇到這麼一個需求:
當用戶在手機浏覽器中點擊一個按鈕時,如果手機上已經該應用程序,則直接打開,如果沒有安裝,則轉向應用下載頁面。 再詳細一點就是:通過點擊網頁中一個按鈕,打開本地某個Activity(如果有的話)或用浏覽器打開某個url。

查了一下文檔,Android是支持這個的:

http://developer.android.com/guide/topics/manifest/data-element.html

解釋一下文檔中的描述:scheme://host:port/pathorpathPrefixorpathPattern

這裡面定義的schema+host+port+(path or pathPrefix or pathPattern)能拼湊出一個http鏈接,包含這個filter的Activity,能處理這個http鏈接。

實現:

  • 網頁代碼

    點擊這個按鈕:

    ? 1 <a id="applink1" href="http://test.xx.com/demo/test.php">打開a>

    在 http://test.xx.com/demo/test.php中,直接請求xxxx.apk下載。

    • Activity代碼

      給目標Activity增加以下filter:

      ? 1 2 3 4 5 6 7 8 9 10 11 <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="test.xx.com " android:path="/demo/test.php" android:scheme="http" /> intent-filter>

      增加該filter後,該Activity就能處理 http://test.xx.com/demo/test.php。在浏覽器中點擊“開始”,發起對該URL的請求時,如果本機安裝了這個應用,系統就會彈出一個選擇,詢問你想使用浏覽器打開,還是使用該應用打開,如下圖:

      \
      如果本機沒有安裝這個應用,則直接會使用浏覽器打開http://test.xx.com/demo/test.php,又因為該頁面中直接請求了XX.apk,浏覽器會提示你下載應用,如下圖:

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved