Android: перехватывать ответ HTTP-формы POST с фильтром намерений ACTION_VIEW

Я настроил фильтр намерений, который будет запускаться, когда пользователь загружает файл с определенным типом MIME во встроенном браузере, мое приложение открывается для его обработки. Затем я получаю URI в поле Intent getData(), которое можно использовать для получения данных. Это кажется странным, так как для получения MIME-типа браузер, очевидно, уже по крайней мере запустил HTTP-запрос, но в случае простого HTTP GET это не имеет большого значения — в этом случае я просто повторно извлекаю его и все. Это хорошо.

Однако, если желаемый контент появляется в результате публикации формы, мне не повезло - и я, кажется, не единственный, но я не могу найти никаких ответов. Вот пара людей, задающих похожие вопросы без ответа, и тикет Google, который, по-видимому, указывает на то, что это было жестким ограничением в более старых версиях, но было исправлено в Android 4.0 / Ice Cream Sandwich (который я использую):

Получение данных из неявного намерения

Обработка типа MIME, который является результат POST браузера в Android

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

Вот фильтр намерений, который я использую:

<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», а данные — это просто URL-адрес, который был Размещено в.

Я пытался использовать getContentResolver().query([theURI], null, null, null, null) моей активности, но это возвращает ноль; Я также пробовал getContentResolver().acquireContentProviderClient([theURI]), но это тоже возвращает ноль.

Я также пытался использовать 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)

Итак, я просто что-то упустил, или это просто ограничение фреймворка?

Спасибо.


person Muggles Merriweather    schedule 20.03.2012    source источник