Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Исправление ошибки `FileUriExposedException` при использовании `TTakePhotoFromCameraAction` в Delphi 10.1 Berlin для Android: применение FileProvider API

Delphi , Интернет и Сети , Браузер

Исправление ошибки FileUriExposedException при использовании TTakePhotoFromCameraAction в Delphi 10.1 Berlin для Android: применение FileProvider API

Разработчики, работающие с мобильными приложениями на платформе Delphi, могут столкнуться с ошибкой FileUriExposedException при использовании стандартного действия TTakePhotoFromCameraAction в приложениях для Android, если целевая версия SDK установлена на 24 или выше. Эта проблема связана с изменениями в API Android, которые требуют использования FileProvider для безопасного обмена файлами между приложениями.

Описание проблемы

При использовании TTakePhotoFromCameraAction в приложениях Delphi для Android с установленной целевой версией SDK 24 или выше, может возникнуть ошибка android.os.FileUriExposedException. Это происходит из-за того, что начиная с Android 7.0 (API 24), система больше не поддерживает использование file:// URI для обмена файлами между приложениями. Вместо этого, необходимо использовать FileProvider, который обеспечивает безопасный механизм для предоставления доступа к файлам.

Подтвержденный ответ

Для решения проблемы необходимо интегрировать FileProvider в проект. Существует библиотека KastriFree на GitHub, которая предоставляет необходимые компоненты для работы с FileProvider в Delphi. Следует отметить, что разработчики Embarcadero уже осведомлены об этой проблеме и планируют внести соответствующие изменения в будущих обновлениях.

Шаги по интеграции FileProvider

  1. Скачайте библиотеку KastriFree с GitHub и добавьте её в свой проект.
  2. В вашем AndroidManifest.xml, добавьте элемент <provider> для FileProvider. Пример кода:
<provider
    android:name="com.kastri.FileProvider"
    android:authorities="your.package.name.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="com.android provi de.filepath"
        android:resource="@xml/filepaths" />
</provider>
  1. Создайте файл filepaths.xml в каталоге res/xml вашего проекта с указанием папок, доступных через FileProvider. Пример содержимого filepaths.xml:
<filePath name="my_images" path="/storage/emulated/0/Pictures/my_images/" />
  1. Измените логику TTakePhotoFromCameraAction, чтобы использовать FileProvider для сохранения и получения URI снимков. Пример изменения кода:
uses
  Androidapi.JNIBridge, Androidapi.Helpers, Androidapi.PrivUtils;

type
  TMyActivity = class(TActivity)
  private
    FPhotoUri: JString;
    // ...
  public
    procedure TakePhoto;
    // ...
  end;

implementation

procedure TMyActivity.TakePhoto;
var
  ContentUri: JString;
begin
  ContentUri := TFileProvider.QueryContentUri(Context.PackageName, 'my_images', 'newpic.jpg');
  with TTakePhotoFromCameraAction.Create(Self) do
  try
    PhotoURI := ContentUri;
    // ...
    ExecuteAction;
  finally
    Free;
  end;
end;

Альтернативный ответ

Если по каким-то причинам интеграция FileProvider невозможна, можно обратиться в службу поддержки Embarcadero с просьбой о создании баг-репорта для исправления TTakePhotoFromCameraAction с целью поддержки API 24+.

Заключение

Использование FileProvider является ключевым решением для исправления ошибки FileUriExposedException в приложениях Delphi для Android, целевая версия SDK которых установлена на 24 или выше. Следуя инструкциям по интеграции FileProvider, разработчики смогут обеспечить корректную работу TTakePhotoFromCameraAction в соответствии с требованиями Android API.

Создано по материалам из источника по ссылке.

Разработчики Delphi столкнулись с ошибкой `FileUriExposedException` при использовании `TTakePhotoFromCameraAction` в Android-приложениях на SDK 24 и выше и должны интегрировать `FileProvider` для корректной работы с файлами.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:35:33/0.0037539005279541/0