-
Постов
414 -
Зарегистрирован
-
Посещение
-
Победитель дней
36
Сообщения, опубликованные Barbanel
-
-
Всем привет!
Столкнулись с новой задачей: при копировании файла во внутреннюю память все идет хорошо, при копировании на SD-карту получаем отказ в доступе, что сегодня вполне ожидаемо.
Умные люди говорят (и даже дают ссылку), что начиная с апи примерно 22, для того чтобы писать на карту памяти нужно просить у пользователя разрешение.
https://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card
Есть пример на Java, но я понятия не имею как это сделать на Delphi. Насколько я понимаю, выполнть Java-код из Delphi невозможно, так?
Есть ли какой обходной путь, или встроенная возможность как запросить права у пользователя?
Всем заранее спасибо!
-
23 минуты назад, FREEFAR сказал:
на VCL вроде PAS файл Const был.
Смотрели в ту сторону?
Отредактированный файл в корень проекта потом класть надо
Огромное спасибо за наводку, это именно оно!
Файл FMX.Consts нужно отредактировать и прописать в путях проекта.
-
Всем привет!
Под андроидом использую код типа:
MessageDlg(rsLocalised_DeleteMsg, System.UITypes.TMsgDlgType.mtConfirmation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0, procedure(const AResult: TModalResult) begin bla bla bla end);
Диалог отображает английские надписи на кнопках [Yes] и [No]
Нужно чтобы кнопки подписывались локальным системным языком, вроде [Да] [Нет], [Ja] [Nein] и т.д.
Вопрос: это возможно? Куда копать, подтолкните меня плиз!
Всем спасибо!
-
1 минуту назад, kami сказал:
у нас в качестве сборщика - какой-то древний макмини.
До iOS11 напрягало, что симулятор для отладки запускается безумно медленно.
А как перешли на Токио + IOS11 - эта проблема перестала играть роль, поскольку симулятор теперь просто не работает . Радикальное такое решение проблемы :)))
Да, ребята в эмбаркадеро стараются, прогресс налицо)))
Сейчас тестируете на реальном телефоне?
-
8 минут назад, FREEFAR сказал:
Железка стоит i7
Потому и быстрее собирает) Врядли в макбуке стоит такая же)
Спасибо за ответы!
-
Во, вот это уже по существу, спасибо!
Неработающий дебаг - это конечно боль, а без условной компиляции под различные платформы имхо вообще никак...
Под хакинтошем дебаг работает? Какая у вас конфигурация компа для сборки в виртуалке?
-
2 минуты назад, FREEFAR сказал:
Возможно кто-то может вам просто написать под iOS приложение и это выйдет гораздо дешевле закупки железа + трудочасы на разработку, отладку, публикацию. Все зависит от целевого проекта и наличия потребности в его сопровождении и развитии.
Боюсь что если я скажу такое шефу - меня уволят)))
Приложение уже написано на Дельфи и успешно работает на андроид-устройствах. Осталось скомпилировать его под iOS и протестировать. Задача стоит именно так: скомпилировать, отладить если необходимо, выложить в магазин Эппла.
Понятно что для тестов нужен айфон, купим, не проблема.
Слышали что нужно также и макбук. Шеф говорит купим, скажи только какой. А с ними дел никогда не доводилось иметь, и какой нужен - я хз))) Шеф говорит купим, грех говорить что не нужно)))
Вот, спрашиваю вашего совета)
-
Доброго времени!
Есть разработанное под Андроид приложение. Начальство поставило задачу выложить это же приложение в Apple AppStore.
Было озвучено мнение что для этого необходимо купить Макбук или что-то аналогичное эппла.
У меня нет опыта работы с эппловскими девайсами и операционками вообще, в связи с чем вопрос:
- какое железо необходимо для нормальной и желательно комфортной разработки под iOS?
"Свежесть" железа играет роль (год выпуска или еще чего-нить)?
Всем спасибо!
-
Это основной поток. Голова уже не варит(((
-
Вопрос полностью аналогичный этому:
https://forums.embarcadero.com/thread.jspa?threadID=119443
Используется XE 10.1 Berlin
-
Здравствуйте!
Стоит задача загружать фотографии и отображать их в списке. Казалось бы, как два пальца, но...
Код работал долгое время, все грузилось и отображалось. Спустя какое-то время, фото грузиться перестали. Дебаггинг выявил, замкнутый бесконечный цикл в этой процедуре:
procedure TBitmap.AssignFromSurface(const Source: TBitmapSurface); var BitmapData: TBitmapData; MaxSize: Integer; ResampledSurface: TBitmapSurface; I: Integer; SourceRect: TRectF; begin MaxSize := CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize); <-- MaxSize = 0 if (Source.Width > MaxSize) or (Source.Height > MaxSize) then begin SourceRect := TRectF.Create(0, 0, Source.Width, Source.Height); SourceRect.Fit(TRectF.Create(0, 0, MaxSize, MaxSize)); ResampledSurface := TBitmapSurface.Create; try ResampledSurface.StretchFrom(Source, Trunc(SourceRect.Width), Trunc(SourceRect.Height), PixelFormat); AssignFromSurface(ResampledSurface); <-- infinity loop here finally ResampledSurface.Free; end; end else begin SetSize(Source.Width, Source.Height); if Map(TMapAccess.Write, BitmapData) then try for I := 0 to TBitmapSurface(Source).Height - 1 do Move(TBitmapSurface(Source).Scanline[I]^, BitmapData.GetScanline(I)^, BitmapData.BytesPerLine); finally Unmap(BitmapData); end; end; end;
В самом начале процедуры MaxSize получает значение 0 (ноль!), размеры картинки больше нуля и процедура влетает в бесконечный цикл на строке
AssignFromSurface(ResampledSurface);
Кто-то сталкивался? Есть мысли как лечить?
Всем спасибо!
-
5 минут назад, kami сказал:
Вам же дали ссылку на Conditional Defines. Это именно то, что вы спрашивали - что под какой платформой неявно задефайнено.
Да. А я больше ничего и не прошу, я поясняю чтобы было понятнее.
-
1 час назад, Равиль Зарипов (ZuBy) сказал:
честно не совсем понял о чем речь. директивы стандартные можно найти в справке ембы
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Conditional_compilation_(Delphi)
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Delphi_Compiler_Directives_(List)_Index
ну и так далее
1 час назад, krapotkin сказал:обычно хватает того, что находится в Build Configuration
выбираем Debug или Release и всё. Но можно и плодить свои конфиги
Попытаюсь пояснить.
Я не вижу в настройках IDE (в опциях проекта), какие у меня определены директивы компилятора для каждой системы (для Win/Android, и Debug/Release).
Либо это баг ИДЕ в целом, либо баг конкретно моей версии - я хз.
При переключении целевой платформы, поля в настройках проекта просто не обновляются. Соотв. я не знаю, какие директивы актуальны для текущей сборки, и какие будут актуальны, если я впишу свой набор директив в эти необновленные поля.Поэтому и спрашиваю, есть ли некие предустановленные компилятором/средой директивы, актуальные в каждой из целевых платформ, для дебага и релиза соответственно.
Как вариант - пошариться в файле .dproj но его формат малопонятен. Я имею ввиду, какие параметры относятся к какой платформе и версии.
-
Здравствуйте!
Подскажите пожалейста, устанавливаются ли какие-либо стандартные Define при компиляции приложения для Play Store?
Понятно что можно установить свои дефайны, разные для дебага и релиза, но хочется знать, существуют ли стандартные.
Спасибо, всем хорошего дня =)
-
До трех секунд пробовали, к тому же нативное приложение галереи обнаруживает новые фото сразу же, при переключении на него.
Создается впечатление что дело не в паузе.
-
В 25.3.2017 в 21:26, ENRGY сказал:
Сделал решение для описанного выше варианта.
Добавил его на Stackoverflow
Поставили такую же задачу - удалять оставшиеся фото из галереи.
Взяли за основу твое решение - работает через раз, и только при отладке:
- перед созданием фото получаем id последнего фото (id_last)
- фотографируем
- ищем все id которые больше id_last и удаляем их.
На последнем шаге и получаем фейл - из под работающего приложения никогда не возращаются id больше id_last. Из под отладки - получаем лишь иногда. Причем если в момент отладки переключиться в галерею, то там есть свежие фото.
Есть идеи, в какую сторону копать? Может перед
vCursor := vContent.query(...)
нужно какой кеш обновить?
-
Попробовали. К сожалению скорость работы этого компонента на устройстве - дикая лажа, оставляет желать лучшего...
Вопрос закрыт, будем использовать соответствующие права.
Всем спасибо!
-
-
Да, понятно что раз идет запись на носитель, то следовательно нужны разрешения на чтение.
Вопрос в том, можно ли получить фото с камеры без записи на носитель?
-
Есть такой код:
if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService, Service) then begin Params.Editable := True; Params.NeedSaveToAlbum := False; Params.RequiredResolution := TSize.Create(self.ClientHeight, self.ClientHeight); Params.OnDidFinishTaking := actTakePhotoFromCameraDidFinishTaking; Service.TakePhoto(btnInfoAddPhoto, Params); end else ShowMessage('This device does not support the camera service');
После того как фото сделано, появляется ошибка EBitmapLoadingFailed 'Loading bitmap failed (/storage/emulated/0/DCIM/Camera/IMG_20170503_170826.jpg).'
Появилась после того как убрал из проекта права READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE.Вопрос: можно ли получать фото от камеры минуя их сохранение в память утсройства?
PS спрашиваю, т.к. стоит задача избавиться от ненужных прав в манифесте.
Всем заранее спасибо!
-
-
Здравствуйте уважаемые,
есть форма с множеством TEdit, при этом они не помещаются на один экран и помещена на TScrollBox.
При скороллинге если скроллить нажимая на подложку (т.е. сам TScrollBox) все работает идеально, если же нажимать на сам TEdit и таким образом скроллить, то выезжает клавиатура, что вобщемто неудобно.
Вопрос: как настроить приложение/форму/ТСкроллБокс так, чтобы при зажатии и движении пальца вверх/вниз на ТЕдите клавиатура не выезжала?
На нативных приложениях описанного выше поведения я не замечал.
Заранее спасибо!
-
Я определяю так:
var FFirstDistance, FLastDistance: integer; .. procedure TformMainMenu2.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiZoom : begin if (not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)) and (not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags)) then FLastDistance := EventInfo.Distance; if (TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then FFirstDistance := EventInfo.Distance; if (TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then begin // zoom out if ( FFirstDistance > FLastDistance ) then begin Plan.Scale := 0.5; end; // zoom in if ( FFirstDistance < FLastDistance ) then begin Plan.Scale := 1.0; end; end; end; end; end;
-
В 9.11.2016 в 18:36, Rokweb сказал:
Доброго времени суток. Сразу к делу, ситуация: имеется TImage, который должен обрабатывать как долгое нажатие, так и короткое. Как это реализовать? Сделал по событиям через OnGesture и OnTap - срабатывают оба, пробовал и OnClick - тоже срабатывает. Чем вообще отличаются друг от друга OnClick и OnTap?
У изображения нужно настроить на какие жесты он реагирует. Кинь на форму TGestureManager, потом настрой поля как показано ниже в коде.
OnClick - срабатывает при касании объекта, срабатывает и в виндовс и на мобильных устройствах.
OnTap - срабатывает несколько интеллектуальнее, причем только на мобильных устройствах (в виндовс не срабатывает).
Упрощенно, он срабатывает только если ты коротко тапнул на контрол, если ты нажал на контрол и повел пальцем, скроля контент или скроля родительский ScrollBox, OnTap НЕ сработает.
// инициализация Image.Touch.GestureManager := gestManager; Image.Touch.InteractiveGestures := [TInteractiveGesture.LongTap]; Image.OnGesture := FormGesture; .. // обработка жеста procedure TfrmMain.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiLongTap : begin DoSomething(); end; end; end;
Запрос "опасных" разрешений в рантайме
в Прочие вопросы
Опубликовано
Андрей, огромное спасибо!
Уже разбираемся.