Java 通过CustomTab或Chrome发布数据

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代码: 读取文件的内容 将内容保存到外部缓存目录 >这一步基本上是不可能的,真的吗?:(即使是在桌面上,今天也没有办

我想通过CustomTab或Chrome发送POST HTTP请求,然后最终显示页面。我做了很多研究,但没有办法。 有办法吗?
可以通过截击发送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();
          }