Не найдено действий для обработки Data Uri

По сути, я хочу создать отчет из некоторых данных, которые пользователь предоставляет моему приложению. Моей первой мыслью было создать файл PDF. Это оказалось неосуществимым, потому что единственная бесплатная библиотека не поддерживает такие функции, как перенос текста, а лицензии на платные библиотеки стоят ~1000 долларов.

Итак, я создал html-файл со всем содержимым, и если я открою этот файл в настольном Chrome, он будет отображаться нормально. Когда пользователь нажимает кнопку «Поделиться», приложение должно запустить намерение, чтобы браузер по умолчанию или мобильный Chrome открыли HTML-файл.

Я знаю, как открыть URL-адрес в браузере через намерение, проблема заключается в открытии файла. Доступ к HTML-файлу осуществляется через FileProvider (например, uri: «content://[package].fileprovider/[filename].html»). Если я запускаю myIntent.setData(htmlFileUri); и запускаю намерение, в диалоговом окне не отображаются браузеры, только текстовые редакторы. То же самое, если я использую setDataAndType.

Затем я попробовал Data Uri: data:text/html;base64,[html as base64]. Опять же, если я скопирую эту строку в настольный Chrome, она будет работать нормально. Однако, если я начну намерение с этим uri, я получу

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=data:text/html;base64,[base64]== typ=text/html }.

Наконец, если я добавлю http:// к началу uri данных, я получу возможность открыть хром или браузер по умолчанию. Если я это сделаю, ничего не будет отображаться, даже URL-адрес страницы.

Есть ли что-нибудь еще, что я могу попробовать, или какие-либо предложения в целом? заранее спасибо


person geniass    schedule 31.01.2014    source источник
comment
сохраните свой html-файл в активе и запустите его оттуда или пользовательский веб-просмотр, чтобы показать html в своем собственном проекте.   -  person Meenal    schedule 31.01.2014


Ответы (1)


Насколько я знаю, встроенное приложение HtmlViewer не работает надежно, установив для части данных вашего намерения значение text/html. Вместо этого вы могли бы

  • Скопируйте HTML-код во внешнее хранилище, а затем установите URI вашего намерения на file:///mnt/sdcard/path/to/file.html.
  • Создайте действие с WebView и используйте метод loadData() для загрузки HTML в ваше приложение.
person Nachi    schedule 31.01.2014
comment
Кажется, это наименее хакерский способ сделать это. Я только что нашел code.google.com/p/android-open-in- браузер, и это сработает, но это огромный взлом и дополнительная работа - person geniass; 31.01.2014