gpt4 book ai didi

java - 通过 CustomTab 或 Chrome 发布数据

转载 作者:行者123 更新时间:2023-12-01 13:22:59 30 4
gpt4 key购买 nike

我想通过 CustomTab 或 Chrome 发送 POST HTTP 请求,然后最终显示页面。我做了很多研究,但没有办法。
有办法吗?
可以通过 Volley 发送 POST 请求,然后最终在浏览器中显示响应吗?

最佳答案

我为此写了一个解决方法。

小心,是一个肮脏的;)

步骤:

  • 您需要创建一个包含表单的 html 文件
  • 向其中添加与您需要传递给您的 url
  • 的值相对应的输入字段
  • 将此文件添加到您的 Assets 文件夹
  • 在安卓代码上:
  • 读取文件内容
  • 将内容保存到外部缓存目录
  • >>这一步是基本的<< 从现在开始遵循这些说明(@Skotos 关于如何使用自定义选项卡 Intent 打开本地 html 的回答 https://stackoverflow.com/a/60078339/2124387)

  • 示例:

    这是我的 html 文件,名为 form_template.html在 Assets 文件夹中:
        <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>

    结束这就是我动态传递url和值给它的方式
        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();
    }

    关于java - 通过 CustomTab 或 Chrome 发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44467287/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com