Java 通过CustomTab或Chrome发布数据
我想通过CustomTab或Chrome发送POST HTTP请求,然后最终显示页面。我做了很多研究,但没有办法。 有办法吗?Java 通过CustomTab或Chrome发布数据,java,android,android-volley,chrome-custom-tabs,android-customtabs,Java,Android,Android Volley,Chrome Custom Tabs,Android Customtabs,我想通过CustomTab或Chrome发送POST HTTP请求,然后最终显示页面。我做了很多研究,但没有办法。 有办法吗? 可以通过截击发送POST请求,然后最终在浏览器中显示响应吗?我为此编写了一个解决方案 小心,这是个脏东西;) 步骤: 您需要创建一个包含表单的html文件 向其中添加与需要传递到url的值对应的输入字段 将此文件添加到您的资产文件夹 关于android代码: 读取文件的内容 将内容保存到外部缓存目录 >这一步基本上是不可能的,真的吗?:(即使是在桌面上,今天也没有办
可以通过截击发送POST请求,然后最终在浏览器中显示响应吗?我为此编写了一个解决方案 小心,这是个脏东西;) 步骤:
- 您需要创建一个包含表单的html文件
- 向其中添加与需要传递到url的值对应的输入字段
- 将此文件添加到您的资产文件夹
- 关于android代码:
- 读取文件的内容
- 将内容保存到外部缓存目录
- >这一步基本上是不可能的,真的吗?:(即使是在桌面上,今天也没有办法。请参阅。非常感谢..虽然由于表单提交而有1秒的延迟,但除此之外,它工作得很好。还需要确保{{fields}}应该被具有正确id、名称和值的标记替换。)
<html> <script> function submitForm() { document.getElementById("form").submit() } </script> <body onload="submitForm()"> <form id="form" action="{{url}}" method="{{method}}" enctype="{{enctype}}"> {{fields}} </form> </body> </html>
Map<String, String> values = ImmutableMap.of( "fooKey", "fooValue", // whatever you "barKey", "barValue" // need here ); try { File redirect = new File(activity.getExternalCacheDir(), "redirect.html"); // To get string from input stream look at here https://stackoverflow.com/a/16110044/2124387 String templateString = getStringFromInputStream(activity.getAssets().open("form_template.html")); List<String> inputFields = new ArrayList<>(); for (String key : values.keySet()) { inputFields.add(String.format("<input type=\"hidden\" name=\"%s\" value=\"%s\" />", key, values.get(key))); } templateString = templateString.replace("{{url}}", url); templateString = templateString.replace("{{method}}", method); // eg. "POST" templateString = templateString.replace("{{enctype}}", encodeType); // eg. "application/x-www-form-urlencoded" templateString = templateString.replace("{{fields}}", StringUtil.join("\n", inputFields)); FileOutputStream fileOutputStream = new FileOutputStream(redirect); fileOutputStream.write(templateString.getBytes()); Uri uri = FileProvider.getUriForFile(activity, BuildConfig.ApplicationId + ".provider", redirect); new Handler().postDelayed(redirect::delete, 5000); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); CustomTabsIntent customTabsIntent = builder.build(); customTabsIntent.intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)) customTabsIntent.launchUrl(this, packageName, url); } catch (IOException e) { e.printStackTrace(); }