Android:使用ACTION_VIEW intent-filter拦截HTTP表单POST响应

时间:2012-03-20 20:57:03

标签: android android-intent http-post android-4.0-ice-cream-sandwich intentfilter

我设置了一个intent-filter,当用户在内置浏览器中下载具有某种MIME类型的文件时会触发,我的应用程序会打开来处理它。然后我在Intent的getData()字段中接收URI,该字段可用于获取数据。这看起来很奇怪,因为要获得MIME类型,浏览器显然已经至少已经启动了HTTP请求,但是在简单的HTTP GET的情况下它没什么大不了的 - 在这种情况下,我只是重新获取它和一切很好。

但是,如果所需的内容是作为表格帖子的结果而来的,我运气不好 - 我似乎不是唯一的,但我找不到任何答案。以下是一些人提出类似问题而没有回复,而Google票据似乎表明这是旧版本的硬限制,但在Android 4.0 / Ice Cream Sandwich(我正在使用)中修复:< / p>

Getting data from an implicit intent

Handling MIME type that is the result of a browser POST in Android

http://code.google.com/p/android/issues/detail?id=1780

这是我正在使用的intent-filter:

<intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.EDIT"/>
            <action android:name="android.intent.action.RUN"/>
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.WEB_SEARCH" />
            <category android:name="android.intent.category.ALTERNATIVE"/>
            <data android:host="*"/>
            <data android:mimeType="application/my-content-type"/>
            <data android:scheme="file"/>
            <data android:scheme="http"/>
            <data android:scheme="https"/>
</intent-filter>

我得到的意图不包含额外内容(getExtras()== null),方案是http(或https,视情况而定),mimeType是“application / my-content-type”,数据只是POST到的URL。

我尝试过使用我的Activity getContentResolver().query([theURI], null, null, null, null),但是返回null;我也尝试了getContentResolver().acquireContentProviderClient([theURI]),但也返回了null。

我也尝试使用getContentResolver().getInputStream([theURI]),但会引发以下情况:

java.io.FileNotFoundException: No content provider: http://[the form URL]
    at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:603)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:535)
    at android.content.ContentResolver.openInputStream(ContentResolver.java:370)
    at my.package.MyActivity.onStart(MyActivity.java:127)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
    at android.app.Activity.performStart(Activity.java:4475)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
    at android.app.ActivityThread.access$600(ActivityThread.java:122)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4340)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

所以 - 我只是遗漏了一些东西,或者这仅仅是框架的限制?

感谢。

0 个答案:

没有答案