Камышев Александр Опубликовано 15 сентября, 2016 Поделиться Опубликовано 15 сентября, 2016 android, Seattle Надо пользователю дать возможность выбирать файлы, к примеру из downloads. OpenDialog на моб. пл. не работает. Может есть у кого наработки? спс. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 15 сентября, 2016 Модераторы Поделиться Опубликовано 15 сентября, 2016 (изменено) для картинок есть родной Action, а вот для файлов нужно через интенты попробовать. например есть родной файловый менеджер/totalcmd они могут отдать путь к файлу. Но как это делается не интересовался а если делать еще и для IOS, то лучше самому навигатор по файлам сделать Изменено 15 сентября, 2016 пользователем ZuBy Цитата Ссылка на комментарий
0 rareMax Опубликовано 15 сентября, 2016 Поделиться Опубликовано 15 сентября, 2016 Та в любом случае легче самому сделать. И кажется @Andrey Efimov даже писал в блоге у себя как такое реализовать. Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 15 сентября, 2016 Поделиться Опубликовано 15 сентября, 2016 У меня, кажется с 5-го Android, при выборе файлов в приложениях появляется такой диалог. Скрин при выборе прикрепляемого документа в Skype. Как его вызывать, тоже интересно. В Windows TOpenDiaolg. А что в iOS? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 15 сентября, 2016 Модераторы Поделиться Опубликовано 15 сентября, 2016 Только что, Pax Beach сказал: У меня, кажется с 5-го Android, при выборе файлов в приложениях появляется такой диалог. Скрин при выборе прикрепляемого документа в Skype. Как его вызывать, тоже интересно. В Windows TOpenDiaolg. А что в iOS? вот об этом я и говорил, а в IOS вообще такое есть? она же не принимает ничего, кроме картинок. остальные файлы доступны только конкретному приложению. или я не прав? Цитата Ссылка на комментарий
0 Модераторы Andrey Efimov Опубликовано 15 сентября, 2016 Модераторы Поделиться Опубликовано 15 сентября, 2016 Не на всех устройствах есть родной файловый менеджер. Поэтому интенты не считаю идеальным вариантом. Идеальным будет вызов своего диалога для выбора файлов или попробуйте подключить уже готовые java-либы с диалогом для выбора файлов. Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 15 сентября, 2016 Поделиться Опубликовано 15 сентября, 2016 Вот в iPhone есть возможность вставить фото или видео: Можно вставить файлы из хранилища, коим выступает iCloud Drive: Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 15 сентября, 2016 Администраторы Поделиться Опубликовано 15 сентября, 2016 На ios штатного диалога нету, кроме выбора фотки и видео. Это противоречит концепции apple. Там наоборот не хотят юзеру навязывать папочную структуру. НО, не смотря на это, функции по чтении директорий системы доступны. И вы в принципе, как минимум, можете её прочитать и самостоятельно ее визуализировать в UI. Равиль Зарипов (ZuBy) 1 Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 15 сентября, 2016 Поделиться Опубликовано 15 сентября, 2016 Нашел такие полезные примеры по теме на английском языке: XE5 iOS app - open PDF from local storage Opening URL within ios application Using 3rd party framework for IOS in Delphi Firemonkey Вопросы по работе с iOS в Delphi Будем изучать ) Цитата Ссылка на комментарий
0 Камышев Александр Опубликовано 29 сентября, 2016 Автор Поделиться Опубликовано 29 сентября, 2016 (изменено) String fn; String path = System::Ioutils::TPath::GetSharedDownloadsPath(); #ifdef __ANDROID__ TSearchRec sr; if ( !FindFirst( path + "/*", faAnyFile, sr) ) { do { if ( sr.Name=="." || sr.Name==".." ) {} else if ( (sr.Attr & faDirectory) == faDirectory ) {} // dir else {} // file // отрисовать в список sr.Name sr.Name; } while ( !FindNext(sr) ); FindClose(sr); // по клику в списке получить fn = path + "/" + name; } #else OpenDialog->InitialDir = System::Ioutils::TPath::GetSharedDocumentsPath(); if ( !OpenDialog->Execute() ) return; fn = OpenDialog->FileName; #endif вот так сделал, кому понадобится, на паскале тоже работает, только синтаксис другой Изменено 30 сентября, 2016 пользователем Камышев Александр Rusland, Равиль Зарипов (ZuBy) и Kitty 3 Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 6 ноября, 2019 Поделиться Опубликовано 6 ноября, 2019 В 15.09.2016 в 11:22, Равиль Зарипов (ZuBy) сказал: для картинок есть родной Action, а вот для файлов нужно через интенты попробовать. например есть родной файловый менеджер/totalcmd они могут отдать путь к файлу. Но как это делается не интересовался а если делать еще и для IOS, то лучше самому навигатор по файлам сделать Равиль написал "для картинок есть родной Action, а вот для файлов нужно через интенты попробовать". Поясните пожалуйста как выбрать картинку расположенную где то на мобильном устройстве? Олег Киреев. Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 6 ноября, 2019 Администраторы Поделиться Опубликовано 6 ноября, 2019 http://docwiki.embarcadero.com/RADStudio/Rio/en/Taking_and_Sharing_Pictures_and_Text_Using_Action_Lists Олег Киреев 1 Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 11 ноября, 2019 Поделиться Опубликовано 11 ноября, 2019 Здравствуйте Ярослав. СпасиБО за ссылку. Я её изучил. Очень полезно. Но у меня немного другая задача. Мне надо занести в БД сфотографированную картинку. Как заносить в БД потоком я знаю, но как получить в переменную имя этого файла фото???? Под Виндовс есть компонент OpenDialog и через него всё просто. Под Андроид такого компонента нет. Пожалуйста Ярослав посоветуйте как это реализовать? С Уважение Олег. Цитата Ссылка на комментарий
0 slav_z Опубликовано 11 ноября, 2019 Поделиться Опубликовано 11 ноября, 2019 вот кусок кода "вырванный" из проекта (написано благодаря ссылке ярослава выше- спасибо): MimeType = image/* - для картинок. если что не так, комментируйте. type TDialog = class private FProc: TProc<string>; procedure ResultCallback(const Sender: TObject; const M: TMessage); public constructor Create; destructor Destroy; override; procedure Show(const MimeType: string; Proc: TProc<string>); end; constructor TDialog.Create; begin TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, ResultCallback); end; destructor TDialog.Destroy; begin TMessageManager.DefaultManager.Unsubscribe(TMessageResultNotification, ResultCallback); end; procedure TDialog.ResultCallback(const Sender: TObject; const M: TMessage); var FilePath: string; begin if TMessageResultNotification(M).RequestCode = 5 then if TMessageResultNotification(M).ResultCode = TJActivity.JavaClass.RESULT_OK then begin FilePath:=JStringToString(TMessageResultNotification(M).Value.getData.getPath); FProc(FilePath); end; Free; end; procedure TDialog.Show(const MimeType: string; Proc: TProc<string>); var Intent: JIntent; begin FProc:=Proc; Intent:=TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_PICK); Intent.setType(StringToJString(MimeType)); MainActivity.startActivityForResult(Intent,5); end; procedure OpenFileDialog(const MimeType: string; Proc: TProc<string>); begin RequestPermissionsExternalStorage( procedure(Granted: Boolean) begin if Granted then TDialog.Create.Show(MimeType,Proc); end); end; Олег Киреев 1 Цитата Ссылка на комментарий
0 slav_z Опубликовано 11 ноября, 2019 Поделиться Опубликовано 11 ноября, 2019 uses System.SysUtils, System.IOUtils, System.Permissions, System.Messaging, FMX.Dialogs; uses Androidapi.Helpers, Androidapi.JNI.Os, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Webkit, Androidapi.JNI.Net, Androidapi.JNI.App, Androidapi.JNI.Support, FMX.Platform.Android; это потребуется Олег Киреев 1 Цитата Ссылка на комментарий
0 Олег Киреев Опубликовано 14 ноября, 2019 Поделиться Опубликовано 14 ноября, 2019 СпасиБО SLAVZ. Попробую. Может Вам пригодится я вот так вышел и положения: Сначала: //выбираем фото из галереи устройства procedure TForm_haracteristik.TakePhotoFromLibraryAction1DidFinishTaking( Image: TBitmap); begin Image_ФотоХаракДвиг.Bitmap.Assign(Image); end; Потом вношу в Базу: //ввести харак-ку procedure TForm_haracteristik.Button_ВвестиClick(Sender: TObject); begin if Edit_НазваниеХарактеристики.Text='' then begin ShowMessage('Вы не ввели название характеристики.'); Abort; end; //проверяем наличие дубля названия характеристики: FDQuery_Engin.Open; FDQuery_Engin.SQL.Clear; FDQuery_Engin.SQL.Add('select * from Tab_Harak_Engin where Name_Harak = ' + #39+ Edit_НазваниеХарактеристики.Text +#39); FDQuery_Engin.Active:=True; if FDQuery_Engin.RecordCount > 0 then begin ShowMessage('Такое название уже есть !'); Abort; end else begin Try FDQuery_Engin.Active:=False; FDQuery_Engin.SQL.Clear; FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin ORDER BY Name_Harak' ); FDQuery_Engin.Active:=True; //вставляем строку новой модели: FDQuery_Engin.Insert; FDQuery_Engin.FieldByName('Name_Harak').AsString:=Edit_НазваниеХарактеристики.Text; //заносим в поток файл картинки IconStream:=TMemoryStream.Create; Image_ФотоХаракДвиг.Bitmap.SaveToStream(IconStream); IconStream.Position := 0; (FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).LoadFromStream(IconStream); IconStream.Free; FDQuery_Engin.Post; ShowMessage('Введено.'); Except ShowMessage('Ошибка ввода в базу.'); End; end; //перезагружаем Boxы Box_НазвХарДвиг.Clear; Box_НазвХарДвигУдаление.Clear; FDQuery_ComboBox_Engin.Active:=False; FDQuery_ComboBox_Engin.SQL.Clear; FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak'); FDQuery_ComboBox_Engin.Active:=True; for i:=1 to FDQuery_ComboBox_Engin.RecordCount do begin FDQuery_ComboBox_Engin.RecNo:=i; Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString); Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString); end; end; Так удаляю из базы если надо: //удалить procedure TForm_haracteristik.Button_УдалитьClick(Sender: TObject); begin if Box_НазвХарДвигУдаление.ItemIndex=-1 then begin ShowMessage('Вы не выбрали имя характеристики.'); Abort; end; TX:=''; TX:=Box_НазвХарДвигУдаление.Selected.Text; //становимся на эту позицию FDQuery_Engin.Active:=False; FDQuery_Engin.SQL.Clear; FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+TX+ #39); FDQuery_Engin.Active:=True; Try FDQuery_Engin.Delete; ShowMessage('Удалено.'); Except ShowMessage('Не удалось удалить.'); End; //перезагружаем Boxы Box_НазвХарДвиг.Clear; Box_НазвХарДвигУдаление.Clear; FDQuery_ComboBox_Engin.Active:=False; FDQuery_ComboBox_Engin.SQL.Clear; FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak'); FDQuery_ComboBox_Engin.Active:=True; for i:=1 to FDQuery_ComboBox_Engin.RecordCount do begin FDQuery_ComboBox_Engin.RecNo:=i; Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString); Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString); end; end; Так просматриваю: //просмотр картинки procedure TForm_haracteristik.ComboBox_НазвХарДвигChange(Sender: TObject); begin //становимся на эту позицию //FDQuery_Engin.Locate('Name_Harak',TX,[loPartialKey, loCaseInsensitive]); FDQuery_Engin.Active:=False; FDQuery_Engin.SQL.Clear; FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+Box_НазвХарДвиг.Selected.Text+ #39); FDQuery_Engin.Active:=True; Try //заносим в поток файл картинки IconStream:=TMemoryStream.Create; (FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).SaveToStream(IconStream); If IconStream.Size<>0 then begin IconStream.Position:=0; Image_Просмотр.Bitmap.LoadFromStream(IconStream); IconStream.Free; end else begin ShowMessage('Нет фото.'); Exit; end; Except ShowMessage('Не удалось загрузить фото.'); End; end; Цитата Ссылка на комментарий
Вопрос
Камышев Александр
android, Seattle
Надо пользователю дать возможность выбирать файлы, к примеру из downloads. OpenDialog на моб. пл. не работает.
Может есть у кого наработки? спс.
Ссылка на комментарий
15 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.