Камышев Александр 90 Опубликовано 15 сентября, 2016 android, Seattle Надо пользователю дать возможность выбирать файлы, к примеру из downloads. OpenDialog на моб. пл. не работает. Может есть у кого наработки? спс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Равиль Зарипов (ZuBy) 2 080 Опубликовано 15 сентября, 2016 (изменено) для картинок есть родной Action, а вот для файлов нужно через интенты попробовать. например есть родной файловый менеджер/totalcmd они могут отдать путь к файлу. Но как это делается не интересовался а если делать еще и для IOS, то лучше самому навигатор по файлам сделать Изменено 15 сентября, 2016 пользователем ZuBy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 rareMax 342 Опубликовано 15 сентября, 2016 Та в любом случае легче самому сделать. И кажется @Andrey Efimov даже писал в блоге у себя как такое реализовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Pax Beach 249 Опубликовано 15 сентября, 2016 У меня, кажется с 5-го Android, при выборе файлов в приложениях появляется такой диалог. Скрин при выборе прикрепляемого документа в Skype. Как его вызывать, тоже интересно. В Windows TOpenDiaolg. А что в iOS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Равиль Зарипов (ZuBy) 2 080 Опубликовано 15 сентября, 2016 Только что, Pax Beach сказал: У меня, кажется с 5-го Android, при выборе файлов в приложениях появляется такой диалог. Скрин при выборе прикрепляемого документа в Skype. Как его вызывать, тоже интересно. В Windows TOpenDiaolg. А что в iOS? вот об этом я и говорил, а в IOS вообще такое есть? она же не принимает ничего, кроме картинок. остальные файлы доступны только конкретному приложению. или я не прав? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Andrey Efimov 782 Опубликовано 15 сентября, 2016 Не на всех устройствах есть родной файловый менеджер. Поэтому интенты не считаю идеальным вариантом. Идеальным будет вызов своего диалога для выбора файлов или попробуйте подключить уже готовые java-либы с диалогом для выбора файлов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Pax Beach 249 Опубликовано 15 сентября, 2016 Вот в iPhone есть возможность вставить фото или видео: Можно вставить файлы из хранилища, коим выступает iCloud Drive: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Brovin Yaroslav 2 080 Опубликовано 15 сентября, 2016 На ios штатного диалога нету, кроме выбора фотки и видео. Это противоречит концепции apple. Там наоборот не хотят юзеру навязывать папочную структуру. НО, не смотря на это, функции по чтении директорий системы доступны. И вы в принципе, как минимум, можете её прочитать и самостоятельно ее визуализировать в UI. 1 Равиль Зарипов (ZuBy) отреагировал на это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Pax Beach 249 Опубликовано 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 Камышев Александр 90 Опубликовано 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 пользователем Камышев Александр 3 Rusland, Равиль Зарипов (ZuBy) и Kitty отреагировали на это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Олег Киреев 23 Опубликовано 6 ноября В 15.09.2016 в 11:22, Равиль Зарипов (ZuBy) сказал: для картинок есть родной Action, а вот для файлов нужно через интенты попробовать. например есть родной файловый менеджер/totalcmd они могут отдать путь к файлу. Но как это делается не интересовался а если делать еще и для IOS, то лучше самому навигатор по файлам сделать Равиль написал "для картинок есть родной Action, а вот для файлов нужно через интенты попробовать". Поясните пожалуйста как выбрать картинку расположенную где то на мобильном устройстве? Олег Киреев. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Brovin Yaroslav 2 080 Опубликовано 6 ноября http://docwiki.embarcadero.com/RADStudio/Rio/en/Taking_and_Sharing_Pictures_and_Text_Using_Action_Lists 1 Олег Киреев отреагировал на это Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 Олег Киреев 23 Опубликовано 11 ноября Здравствуйте Ярослав. СпасиБО за ссылку. Я её изучил. Очень полезно. Но у меня немного другая задача. Мне надо занести в БД сфотографированную картинку. Как заносить в БД потоком я знаю, но как получить в переменную имя этого файла фото???? Под Виндовс есть компонент OpenDialog и через него всё просто. Под Андроид такого компонента нет. Пожалуйста Ярослав посоветуйте как это реализовать? С Уважение Олег. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
0 slav_z 29 Опубликовано 11 ноября вот кусок кода "вырванный" из проекта (написано благодаря ссылке ярослава выше- спасибо): 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 29 Опубликовано 11 ноября 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 Олег Киреев 23 Опубликовано 14 ноября СпасиБО 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 на моб. пл. не работает.
Может есть у кого наработки? спс.
Поделиться сообщением
Ссылка на сообщение
Поделиться на другие сайты