Я настроил фильтр намерений, который будет запускаться, когда пользователь загружает файл с определенным 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)
Итак - я что-то упускаю или это просто ограничение фреймворка?
Спасибо.