可能重複:
How can I open android browser with specified POST parameters?啓動默認瀏覽器,意圖和後期參數
我想做些什麼 這樣的:
startActivity(新意圖(意圖。 ACTION_VIEW,Uri.parse(「http://www.somepage.com?par1=val1&par2=val2」));
但我不想發送與獲取但與帖子的參數。 如何按上述方式來做到這一點?
很多感謝, 納瓦霍
可能重複:
How can I open android browser with specified POST parameters?啓動默認瀏覽器,意圖和後期參數
我想做些什麼 這樣的:
startActivity(新意圖(意圖。 ACTION_VIEW,Uri.parse(「http://www.somepage.com?par1=val1&par2=val2」));
但我不想發送與獲取但與帖子的參數。 如何按上述方式來做到這一點?
很多感謝, 納瓦霍
納瓦霍,
什麼你正在嘗試做的不能用上面的URL來完成與您上述提出的約束。主要原因是上面的URL是一個GET URL。 POST網址中沒有上述參數。它們在實際的REQUEST中傳遞,而不是URL。
要完成你想要做的事情,你必須攔截意圖,重新格式化URL,然後用新的Intent啓動瀏覽器。關鍵是URL的來源。如果源代碼來自您或您可以跟蹤的內容,那很簡單,只需創建一個自定義的Intent。如果來源不在您的控制範圍內,則可能會遇到問題(請參閱下文)...
1)GET和POST不可互換。如果你正在搞亂那些不是你自己的數據,或者不想去你控制的網站,那麼你可能會破壞該網站的功能,因爲並非每個人都出於安全原因同時爲GET和POST編程。 2)如果您對瀏覽器的相同意圖做出響應,那麼用戶可能無法理解您的應用如果始終打開默認設置,則可能無法做到這一點。
另一種可能性(如果您在控制網站的話)是通過創建一個cookie來響應意圖,您的站點可以根據實際的數據要求來讀取該cookie。這需要服務器上的PHP/ASP或JS激活的HttpRequest()。
如果我有更多的信息,我可以給你更好的建議。
FuzzicalLogic
它可以完成,但以一個棘手的方式。
您可以使用自動提交表單創建一個小的html文件,將其讀入一個字符串,替換參數並將其作爲數據uri而不是url嵌入到intent中。 有一些負面的東西,它只能直接調用默認瀏覽器,並且技巧將被存儲在瀏覽器歷史記錄中,如果您導航回去,它會出現。
下面是一個例子:
HTML文件(/ RES/RAW):
<html>
<body onLoad="document.getElementById('form').submit()">
<form id="form" target="_self" method="POST" action="${url}">
<input type="hidden" name="param1" value="${value}" />
...
</form>
</body>
</html>
的源代碼:
private void browserPOST() {
Intent i = new Intent();
// MUST instantiate android browser, otherwise it won't work (it won't find an activity to satisfy intent)
i.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity"));
i.setAction(Intent.ACTION_VIEW);
String html = readTrimRawTextFile(this, R.raw.htmlfile);
// Replace params (if any replacement needed)
// May work without url encoding, but I think is advisable
// URLEncoder.encode replace space with "+", must replace again with %20
String dataUri = "data:text/html," + URLEncoder.encode(html).replaceAll("\\+","%20");
i.setData(Uri.parse(dataUri));
startActivity(i);
}
private static String readTrimRawTextFile(Context ctx, int resId) {
InputStream inputStream = ctx.getResources().openRawResource(resId);
InputStreamReader inputreader = new InputStreamReader(inputStream);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
StringBuilder text = new StringBuilder();
try {
while ((line = buffreader.readLine()) != null) {
text.append(line.trim());
}
}
catch (IOException e) {
return null;
}
return text.toString();
}
上面的作品也適用於我。但是,這也可以通過_Chrome Custom Tabs_以類似的方式完成嗎?我擔心這可能是一種破解,可以早晚修復。 – xanderiel 2016-07-29 09:43:00
你有沒有得到這個工作?我正在嘗試做同樣的事情。 – jax 2010-11-15 16:18:28