我设置了一个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)
所以 - 我只是遗漏了一些东西,或者这仅仅是框架的限制?
感谢。