2012-05-15 59 views
4

我有一個網頁(在瀏覽器中顯示,不是WebView),我想將一些數據(例如使用http POST)傳遞給普通的Android應用。如何攔截來自web表單的http POST數據

我只需要啓動應用程序並提供數據。我知道應用程序可以通過註冊一個意圖過濾器來啓動,但是我在數據傳遞部分丟失了。

不需要URL是真實的,假的URL是好的。

這可以在使用HTTP過濾器的BlackBerry中完成。有沒有辦法在Android中做同樣的事情?

在此先感謝。

+1

有一些SO問題http://stackoverflow.com/questions/2958701/launch-custom-android-application-from-android-browser,http://stackoverflow.com/quest離子/ 3469908/make-a-link-in-the-android-browser-start-up-my-app和http://stackoverflow.com/questions/3038958/launch-app-with-url – user370305

+0

@ user370305謝謝,我已經閱讀了所有內容。但是,正如我試圖解釋我的問題,我已經知道如何啓動應用程序,但不知道如何傳遞數據。 –

+1

檢查我的blogspot'html和activity links'它包含有關傳遞數據的信息(使用GET):http://sherifandroid.blogspot.com/2011/09/html-and-activity-links-in-textview.html –

回答

4

在喜歡你的網頁放鏈接:

<a href="my.special.scheme://xyz.com/data1/data2"> 

在你活動的onCreate()您可以通過意向對象訪問數據..

Uri data = getIntent().getData(); 
String scheme = data.getScheme(); // "http" 
String host = data.getHost(); // "xyz.com" 
List<String> params = data.getPathSegments(); 
String first = params.get(0); // "data1" 
String second = params.get(1); // "data2" 
2

我將研究的方法是實現一個非常簡單的HTTP服務器服務作爲您的應用程序的一部分。爲您的確切目的編寫小型Web服務器將非常簡單:偵聽TCP端口80,接受傳入連接,然後繼續讀取套接字,直至看到\r\n\r\n跳過標頭,然後讀取POST數據。您的網頁大概會通過'localhost'訪問它。我不知道這種方法是否存在任何主要障礙,但是在做快速搜索時,我已經看到已經有小型Android網絡服務器可用,因此在技術上似乎是可能的。

+0

Humm,但該服務是一個很好的候選人被操作系統阻止。 –

1

這裏是我的兩分錢:

雖然沒有實際攔截,但此方法確實使用傳統的意圖過濾機制的工作。

例子:

  1. 瀏覽器打開一個鏈接myownscheme://myfakeurl.fake/http%3A%2F%2Factualurl.com
  2. Android應用匹配意圖過濾器和啓動。它分析URL中的參數並解碼,獲取「http://actualurl.com」
  3. android應用程序連接到傳遞的url並獲取數據。

    String encodedURL = getIntent().getData().getPathSegments().get(0); //Returns http%3A%2F%2Factualurl.com 
        String targetURL = Html.fromHtml(encodedURL); //Returns http://actualurl.com 
        //Now do the GET and fetch the data.