Вопрос выбора файлов в мобильных приложениях на базе FireMonkey может быть не так прост, как на десктопных системах. Разработчики, работающие с Windows, часто используют TOpenDialog, который не поддерживается на Android и iOS. В этой статье мы рассмотрим, как можно реализовать функционал выбора файлов в мобильных приложениях FireMonkey, используя версию Delphi 10.3.
Проблема
На десктопных системах выбор файлов можно реализовать с помощью компонента TOpenDialog, который является стандартным инструментом в Delphi. Однако, при разработке мобильных приложений на FireMonkey, этот компонент не доступен. Большинство обсуждаемых решений требуют использования устаревших внешних библиотек, что делает процесс разработки более сложным и трудоемким.
Решение
Шаг 1: Использование Intent на Android
Для Android можно использовать Intent для запуска встроенного файлового менеджера. Вот пример кода, который позволяет пользователю выбрать файл:
procedure TForm1.Button1Click(Sender: TObject);
var
IntentPicker: JIntent;
IntentChooser: JIntent;
Data: JString;
begin
IntentPicker := TJIntent.Create;
IntentPicker.ActionType := IntentActionPick;
IntentPicker.Type := 'image/*'; // Выбор типа файлов, например, изображений
IntentChooser := TJIntent.CreateChooser(IntentPicker, 'Выберите изображение');
try
if (TPlatform.OS = TOSB_Android) then
begin
if (TAndroidHelper.CurrentActivity.IntentSenderSendIntent(IntentChooser)) then
begin
Data := TJIntent.GetIntentEx(TAndroidHelper.CurrentActivity.Intent).Type;
// Получение пути выбранного файла
if IntentActionPick = TJIntent.GetData(Data).Action then
// Обработка выбранного файла
TJIntent.GetIntentEx(TAndroidHelper.CurrentActivity.Intent).ClipData.ItemAt(0).Text;
end;
end;
finally
IntentPicker.Release;
IntentChooser.Release;
end;
end;
Шаг 2: Выбор файлов на iOS
Для iOS разработчики могут использовать UIDocumentPickerViewController для выбора файлов. Пример кода на Object Pascal:
procedure TForm1.Button1Click(Sender: TObject);
var
DocumentPicker: UIDocumentPickerViewController;
begin
if TPlatform.OS in [TOSB_iOS, TOSB_tvos] then
begin
DocumentPicker := TUIDocumentPickerViewController.Wrap(
UIDocumentPickerViewController.ViewControllerWithDocumentTypes(
[UTTypeItem],
nil
)
);
DocumentPicker.Delegate := DocumentPickerController;
DocumentPicker.AllowsMultipleSelection := False;
// Установка представления, в котором отобразить контроллер выбора
TViewController.Wrap(TViewController.GetViewControllerFor(Owner), DocumentPicker);
end;
end;
type
TDocumentPickerController = class(TInterfacedWrapper, IUIDocumentPickerControllerDelegate)
function Controller(_controller: IUIDocumentPickerController; didPickDocumentAtURL: JBoolean; aDocURL: NSUrl; Error: NSError): JBoolean; static;
end;
{ TDocumentPickerController }
function TDocumentPickerController.Controller(AController: IUIDocumentPickerController; DidPickDocumentAtURL: JBoolean; aDocURL: NSUrl; Error: NSError): JBoolean;
begin
// Обработка выбранного файла
Result := True;
end;
Подтвержденный ответ
Использование Intent на Android и UIDocumentPickerViewController на iOS предоставляет разработчикам возможность интегрировать функционал выбора файлов в их приложения, не прибегая к созданию всего с нуля.
Альтернативный ответ
Разработчики также могут рассмотреть использование внешних библиотек или компонентов, однако, учитывая устаревание многих из них, предпочтительнее использовать встроенные возможности платформ.
Заключение
Выбор файлов в мобильных приложениях на FireMonkey может быть выполнен с помощью Intent на Android и UIDocumentPickerViewController на iOS. Несмотря на то, что процесс может показаться сложным, использование примеров кода выше позволит разработчикам интегрировать необходимый функционал в свои приложения, сэкономив время и усилия на разработку с нуля.
Вопрос связан с реализацией функции выбора файлов в мобильных приложениях FireMonkey для Android и iOS, рассматриваются методы и примеры кода для интеграции данного функционала без использования устаревших внешних библиотек.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.