Вопрос разработчиков мобильных приложений на платформе Android иногда касается проблем с URI, особенно при работе с файлами. В данном случае, разработчик столкнулся с ошибкой при попытке отправить файл по электронной почте из приложения, написанного на Delphi для Android. Ошибка заключалась в неудачной попытке найти конфигурированный корень, содержащий файл, который необходимо отправить.
Пример кода, вызывающего ошибку:
var
lURI: Jnet_Uri;
// ... другие переменные ...
begin
// ... код сохранения файла ...
lURI := TJFileProvider.JavaClass.getUriForFile(
TAndroidHelper.Context, LAuthority, lJFile);
// ... код отправки файла ...
end;
Описание проблемы:
Приведенный выше код содержит ошибку, связанную с неправильной настройкой FileProvider. В частности, путь к файлу, указанный в XML-файле filepaths.xml, не был настроен корректно.
Решение:
Разработчик обратился за помощью к сообществу, и был предложен следующий подход:
Использовать метод TAndroidHelper.JFileToJURI для получения URI файла, который не требует явного указания LAuthority.
Убедиться, что опция "Secure File Sharing" включена в списке прав проекта в настройках проекта.
Пример исправленного кода:
procedure TestSendEmail();
{$IF DEFINED(ANDROID)}
var
lIntent: JIntent;
lJRecipient: TJavaObjectArray<JString>;
lFileName, lFilePath, lFilePathFileName: string;
// ... другие переменные ...
begin
// ... код сохранения файла ...
{$ENDIF}
lIntent := TJIntent.Create;
// ... настройка намерения для отправки электронной почты ...
{$IF DEFINED(ANDROID)}
lUri := TAndroidHelper.JFileToJURI(
TJFile.JavaClass.init(StringToJString(lFilePathFileName)));
// Добавляем URI файла в намерение
lIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap(lUri));
try
TAndroidHelper.Activity.startActivity(lIntent);
except
on E: Exception do
begin
ShowMessage(E.Message);
end;
end;
{$ENDIF}
end;
Подтвержденный ответ:
После внесения изменений, предложенных сообществом, проблема была решена. Использование TAndroidHelper.JFileToJURI позволило корректно получить URI файла, и отправка файла по электронной почте прошла успешно.
Заключение:
При работе с FileProvider важно правильно настроить XML-файл filepaths.xml и убедиться, что опция "Secure File Sharing" активирована в настройках проекта. Использование метода TAndroidHelper.JFileToJURI упрощает процесс получения URI и предотвращает возможные ошибки.
Разработчики столкнулись с ошибками при отправке файлов по электронной почте в мобильном приложении на Delphi для Android из-за неправильной настройки FileProvider.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.