使用intent和post参数启动默认浏览器

nav*_*ajo 8 android http-post android-intent

可能重复:
如何使用指定的POST参数打开android浏览器?

我想做这样的事情:

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(" http://www.somepage.com?par1=val1&par2=val2 "));

但我不想发送参数与get但是发帖.我怎么能这样做?

非常感谢纳瓦霍人

djp*_*ado 12

它可以做到,但是以一种棘手的方式.

您可以使用自动提交表单创建一个小html文件,将其读入字符串,替换params并将其作为数据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>
Run Code Online (Sandbox Code Playgroud)

源代码:

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();
}
Run Code Online (Sandbox Code Playgroud)


Fuz*_*gic 1

纳瓦霍语,

您尝试执行的操作无法通过上述 URL 以及您在上面所做的约束来完成。主要原因是上面的 URL 是 GET URL。POST URL 中没有上述参数。它们是在实际的 REQUEST 中传递的,而不是 URL。

为了完成您想要做的事情,您必须拦截 Intent,重新格式化 URL,然后使用新的 Intent 启动浏览器。URL 的来源是关键。如果来源来自您或您可以跟踪的内容,那很简单,只需创建一个自定义意图即可。如果来源超出您的控制范围,那么您可能会遇到问题(见下文)...

1) GET 和 POST 不可互换。如果您弄乱了不属于您的数据或不访问您控制的站点,那么您可能会破坏该站点的功能,因为出于安全原因,并非每个人都对 GET 和 POST 进行编程。

2)如果您响应与浏览器相同的 Intent,那么如果您的应用程序始终打开默认值,则用户可能无法理解您的应用程序的用途。

另一种可能性(如果您控制网站)是通过创建您的网站可以根据实际数据要求读取的 cookie 来响应 Intent。这需要服务器上的 PHP/ASP 或 JS 激活 HttpRequest()。

如果我有更多信息,我可以为您提供更好的建议。

模糊逻辑