处理作为 Android 中浏览器 POST 结果的 MIME 类型

Posted

技术标签:

【中文标题】处理作为 Android 中浏览器 POST 结果的 MIME 类型【英文标题】:Handling MIME type that is the result of a browser POST in Android 【发布时间】:2011-10-16 23:35:30 【问题描述】:

我有一个为我感兴趣的 MIME 类型成功调用的 Activity。从服务器发送的内容是作为 POST 的结果创建的 XML 文档。我尝试以两种不同的方式处理结果,但都没有运气:

    android:mimeType="application/customapp" 这样做,我的活动就会运行,但我从 Intent.getData() 获得的 URI 是用于帖子的 URL。对 getContentResolver().openInputStream() 的调用会导致 java.io.FileNotFoundException: No content provider: http://.... 显然,仅仅点击该 URL 不会像我那样工作'没有发布的数据。 android:pathPattern=".*\custom.app" URL 的最后一段是 custom.app,所以我尝试将它与路径模式一起使用。这样,浏览器尝试下载文档并发生以下两种情况之一:股票浏览器尝试下载“无标题”但失败。 Opera 下载该文档,并按照希望命名,并提供打开该文件的提示,这可以正常工作,但 Opera Mini 只下载该文件。

这是我的清单的相关部分,其中的方案:

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".CustomappActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="application/customapp" />
            <data android:scheme="http" />
            <data android:scheme="https" />
        </intent-filter>
    </activity>
</application>

我想使用第一个选项,但即使它需要 Opera,也可以忍受第二个选项,但前提是它在两个版本的 Opera 中都能一致地工作。我只是看不到为从服务器发送的结果获取输入流的方法。

【问题讨论】:

更新:在股票浏览器场景中,下载管理器因 HTTP 400 错误而中止。浏览器似乎忽略了内容是 POST 的结果这一事实,将 URL 传递出去,然后将其作为简单的 GET 处理。 【参考方案1】:

我会回答我自己的问题。显然,我被搞砸了。股票浏览器及其与下载管理器的交互方式存在一个已知问题。此时,它无法检索作为 HTTP POST 结果发送的文档。漏洞详解here

【讨论】:

以上是关于处理作为 Android 中浏览器 POST 结果的 MIME 类型的主要内容,如果未能解决你的问题,请参考以下文章

Cordova android 应用程序 - POST 请求返回“禁止访问”错误

ajax post提交到SpringMVC的Controller并将处理结果传递到前台输出总结

android客户端和服务器端怎么交互

对于网页中的form元素,method 属性的get和post有何不同?

页面一个post请求,后台执行将近5分钟后返回结果但是页面获取不到返回值,一直显示加载中,不是ajax请求

android如何将int和double作为namevaluepair作为http post发送