启动默认浏览器,意图和后期参数
可能重复:
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