Перейти к содержанию
Fire Monkey от А до Я

Rusland

Пользователи
  • Постов

    1 204
  • Зарегистрирован

  • Посещение

  • Победитель дней

    26

Весь контент Rusland

  1. PS. Первое решение оказалось рабочим... не знаю почему у меня вчера отказывалось нормально работать Пользуйтесь. PPS. Надеюсь Embarcadero исправит этот баг в следующей версии и не придется делать столько телодвижений ) Странно что после закрытия программы сервис перестает слать координаты - значок GPS пропадает. Хотя в Настройки->Приложения->Работающие я вижу как процесс перезапускается.
  2. Тоже использую SQLite Expert Professional 3
  3. Brovin Yaroslav, объясните как в Bitmap Style Designer открыть для редактирование файл с расширение *.style? Сохранять дает, а открывать нет. Опытным путем установил что стиль *.style для просмотра результата можно Открыть с помощью программы C:\Program Files (x86)\Embarcadero\Studio\17.0\bin\FMXMobileStyleViewer.exe Если открываю C:\Program Files (x86)\Embarcadero\Studio\17.0\Redist\styles\Fmx\AquaGraphite.style c помощью FMXMobileStyleViewer.exe, то вижу: То есть ни одной гугловской кнопочки в стиле нет. Стиль для Firemonkey, но не для Android в частности. Выходит что самому надо их рисовать? А как это сделать? PS. Нормальный вид имеют Transparent, Win10Modern, Win10ModernBlue и Win10ModernDark PPS. Для таких же незнаек как и я: Похоже единственный вариант редактирования стилей - это через TStyleBook - он позволяет загружать в него *.Style и менять параметры... но как в нем редактировать не понятно... инфы мало
  4. Rusland

    Rad Studio лаги

    Вот этот HotFix установить нужно после апдейта )
  5. На радостях что сервис теперь может автоматически стартовать после перезагрузки системы (спасибо Ефимову Андрею), решил что пора научится получать координаты GPS через сервис. Вариант 1. Как-то я уже пробовал это сделать прицепив к dfm TLocationSensor, но был крах. Сегодня я прочитал вот такую статейку где говорится как раз об этом - крошится из-за того что в System.Android.Sensors используется Activity, которое null (у нас же сервис, а не простое приложение) и предлагается решение в виде внесения изменение в System.Android.Sensors и System.Sensors. Я внес указанные изменения (сами файлы в patch.zip прикрепил к сообщению), скачал их Демо пример отсюда, положил вышеуказанные файлы в папку patch, но при компиляции выдает 3 ошибки вида: на строки соответственно Попробуйте кто-нибудь скомпилировать у себя пожалуйста. Пример должен быть рабочий по идее... тогда я решил действовать по другому: Вариант 2. Я вспомнил что можно обойтись без TLocationSensor и использовать LocationListener. В сервисе сделал так: unit Unit2; interface uses System.SysUtils, System.Classes, System.Android.Service, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Os, Androidapi.JNI.App, Androidapi.JNI.Location,Androidapi.JNIBridge,Androidapi.JNI.JavaTypes,Androidapi.Helpers, // для координат AndroidApi.Log; // лог смотреть через monitor.bat type TLocationListener = class; TAndroidServiceDM = class(TAndroidService) function AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; private { Private declarations } FLocationManager: JLocationManager; locationListener: TLocationListener; public destructor Destroy; override; { Public declarations } procedure StartLocator(); procedure onLocationChanged(Location: JLocation); end; TLocationListener = class(TJavaLocal, JLocationListener) private [weak] FParent: TAndroidServiceDM; public constructor Create(AParent: TAndroidServiceDM); procedure onLocationChanged(Location: JLocation); cdecl; procedure onProviderDisabled(provider: JString); cdecl; procedure onProviderEnabled(provider: JString); cdecl; procedure onStatusChanged(provider: JString; status: Integer; extras: JBundle); cdecl; end; var AndroidServiceDM: TAndroidServiceDM; implementation {%CLASSGROUP 'FMX.Controls.TControl'} {$R *.dfm} function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin StartLocator(); Result:=TJService.JavaClass.START_STICKY; end; destructor TAndroidServiceDM.Destroy; begin if Assigned(locationListener) then FLocationManager.removeUpdates(locationListener); inherited; end; procedure TAndroidServiceDM.onLocationChanged(Location: JLocation); var M: TMarshaller; begin if Assigned(Location) then begin Logi(M.AsUtf8('LogLatitude '+ Location.getLongitude.ToString).ToPointer); Logi(M.AsUtf8('LogLongitude '+Location.getLongitude.ToString).ToPointer); end; end; procedure TAndroidServiceDM.StartLocator(); var LocationManagerService: JObject; GPSLocation, NetworkLocation: JLocation; begin if not Assigned(FLocationManager) then begin LocationManagerService := SharedActivityContext.getSystemService(TJContext.JavaClass.LOCATION_SERVICE); FLocationManager := TJLocationManager.Wrap((LocationManagerService as ILocalObject).GetObjectID); if not Assigned(locationListener) then locationListener := TLocationListener.Create(self); FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.GPS_PROVIDER, 10000, 0, locationListener, TJLooper.JavaClass.getMainLooper); FLocationManager.requestLocationUpdates(TJLocationManager.JavaClass.NETWORK_PROVIDER, 10000, 0, locationListener, TJLooper.JavaClass.getMainLooper); end; GPSLocation := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.GPS_PROVIDER); NetworkLocation := FLocationManager.getLastKnownLocation(TJLocationManager.JavaClass.NETWORK_PROVIDER); onLocationChanged(GPSLocation); onLocationChanged(NetworkLocation); end; constructor TLocationListener.Create(AParent: TAndroidServiceDM); begin inherited Create; FParent := AParent; end; procedure TLocationListener.onLocationChanged(Location: JLocation); begin FParent.onLocationChanged(Location); end; procedure TLocationListener.onProviderDisabled(provider: JString); begin end; procedure TLocationListener.onProviderEnabled(provider: JString); begin end; procedure TLocationListener.onStatusChanged(provider: JString; status: Integer; extras: JBundle); begin end; end. После старта приложения, через несколько секунд оно морозится и система спрашивает "Подождать?". Расстановка breakpoint-ов мне не помогла, ошибка случается раньше Segment fault 11. Пример в архиве ASARservRepair2.zip прикрепляю. Посмотрите пожалуйста в чем может быть проблема? ASARservRepair2.zip patch.zip
  6. gry, посмотрите это видео, может поможет Код я не проверял
  7. У меня аппарат root-ован, но я все равно не знаю какой код писать чтобы проверить )
  8. Это нужен отдельный сервер, что не очень то хорошо. Печаль Кодом на php поделитесь?
  9. Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?
  10. Странно, но вот здесь сказано: "Following are predefined FireMonkey styles that you can easily use within your application:" и указан список стилей, включая AquaGraphite.Style
  11. Andrey Efimov, большое спасибо. Понял свои ошибки. Теперь все работает как надо! Статья будет очень полезна для всех! Также хотелось бы видеть продолжение статьи про Сервисы, в которой бы освещались возможности... что можно делать, а что нельзя... а то приходится методом тыка изучать
  12. Rusland

    Serial port

    Попробуйте подключить через подклейку к classes.dex
  13. Создал новый проект, повторил все действия, добавив лишь Androidapi.JNI.App в юнит сервиса и System.Android.Service в юнит программы (согласно статье ). Также вижу как приложение крошится при старте. При обычном запуске все нормально. Успел сохранить вот такой кусок лога в Android Device Monitor (фильтровал по названию проекта myproject) 01-27 15:24:39.514: D/PackageManager(493): scan package: /data/app/com.mycompany.myproject-2.apk , start at: 21264ms. 01-27 15:24:40.123: I/PackageManager(493): Perform pre-dex opt for package: com.mycompany.myproject 01-27 15:24:40.132: D/PackageManager(493): scan package: /data/app/com.mycompany.myproject-2.apk , end at: 21881ms. elapsed time = 617ms. 01-27 15:25:02.167: I/ActivityManager(493): Start proc com.mycompany.myproject for broadcast com.mycompany.myproject/com.mycompany.myproject: pid=1132 uid=10119 gids={50119, 3003, 1028} 01-27 15:25:02.225: V/ActivityManager(493): Binding process pid 1132 to record ProcessRecord{425f9c00 1132:com.mycompany.myproject/u0a10119} 01-27 15:25:02.228: V/ActivityManager(493): New app record ProcessRecord{425f9c00 1132:com.mycompany.myproject/u0a10119} thread=android.os.BinderProxy@427c5b18 pid=1132 01-27 15:25:02.278: E/AndroidRuntime(1132): java.lang.RuntimeException: Unable to instantiate receiver com.mycompany.myproject: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myproject" on path: DexPathList[[zip file "/data/app/com.mycompany.myproject-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myproject-2, /vendor/lib, /system/lib]] 01-27 15:25:02.278: E/AndroidRuntime(1132): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mycompany.myproject" on path: DexPathList[[zip file "/data/app/com.mycompany.myproject-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mycompany.myproject-2, /vendor/lib, /system/lib]] 01-27 15:25:02.434: V/WindowManager(493): Changing focus from Window{427992b8 u0 com.android.launcher/com.android.launcher2.Launcher} to Window{425f6970 u0 Application Error: com.mycompany.myproject} 01-27 15:25:02.436: I/WindowManager(493): Gaining focus: Window{425f6970 u0 Application Error: com.mycompany.myproject} 01-27 15:25:02.462: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) setConsumerName: Application Error: com.mycompany.myproject 01-27 15:25:02.486: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) setDefaultBufferSize: w=480, h=190 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:0) connect: api=2 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:2) setSynchronousMode: enabled=1 01-27 15:25:02.504: I/BufferQueue(133): [Application Error: com.mycompany.myproject](this:0x4198d920,api:2) new GraphicBuffer needed 01-27 15:25:02.520: I/SurfaceTexture(133): [Application Error: com.mycompany.myproject](this:0x4198e908,api:2) [void* android::SurfaceTexture::createImage(EGLDisplay, const android::sp<android::GraphicBuffer>&)] 01-27 15:25:02.624: D/Launcher(738): IconCache, CacheLocked get title from cache: title = MyProject 01-27 15:25:02.646: D/Launcher(738): AllAppsList, Add application in app list: app = ComponentInfo{com.mycompany.myproject/com.embarcadero.firemonkey.FMXNativeActivity}, title = MyProject 01-27 15:25:02.955: D/AES(493): process : com.mycompany.myproject 01-27 15:25:02.955: D/AES(493): module : com.mycompany.myproject v1 (1.0.0) 01-27 15:25:02.956: D/AEE/LIBAEE(493): shell: raise_exp(2, 1132, -1361051648, com.mycompany.myproject, 0x0x56549008, 0x0x0)
  14. Andrey Efimov, у меня сервис стартует автоматом OnCreate private { Private declarations } FService: TLocalServiceConnection; ... procedure TForm1.FormCreate(Sender: TObject); begin FService := TLocalServiceConnection.Create; FService.StartService('MyService'); end; Сейчас попробую сначала проект создать. Еще вот на что обратил внимание, в предыдущем проекте я забыл в сервисе прописать function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Result := TJService.JavaClass.START_STICKY; end; НО при закрытии приложения, процесс все равно восстанавливался! Спрашивается, а нужна ли вообще эта строчка?
  15. У меня Android Device Monitor успевает найти устройство до загрузки и я вижу логи, вижу как проскакивает ошибка, но как только я жму кнопку Сохранения в файл, получаю файл 0 размера. Да и кроме того в логе видимо какое-то ограничение на количество записей - за считанные секунды моя ошибка пропадает и не успеваю ее посмотреть. Как расширить количество записей в логе?Оказывается прежде чем сохранять выделять надо через Ctrl+A
  16. О, а это идея! Я действовал только по третьему сценарию как у вас: "Сервис - стандартный Манифест + стандартный classes Приложение - подсовываем Манифест + клеим classes" Надо тоже попробовать к самому сервису клеить classes (как в первом варианте). Andrey Efimov, а не пробовали ли вы вместо замены classes.dex добавлять в Deployment созданный bat-ником файл *.dex до склейки. Где-то видел на stackoverflow такое предложение... я попробовал, но у меня не получилось. Почитал вашу статью, возникли вопросы: 1.) Почему проект сервиса обязательно должен быть в отдельной папке? Из-за того что все компилируется в одну папку Android/Debug, да? 2.) Что будет если переименовать сервис в «Service»? ) 3.) Можно подробнее как смотреть логи через monitor.bat? ) Не могли бы вы расширить свою статью и рассказать в ней что можно использовать в сервисе, а что нет (например что нельзя использовать визуальные компоненты - это понятно, но хотелось бы знать что можно... можно ли в сервисе получать координаты местоположения с сенсора?) PS. А какой classes.dex вы подсовывали в Попытках 1 и 2 в Сервис? Ведь при Build-е проекта Сервиса classes.dex не создается (кстати в Deployment сервиса по умолчанию classes подключается, но он выделен серым шрифтам что говорит о том что подключать то нечего) В общем на текущий момент по третьему Способу №3 просто программа запускается, но после рестарта системы программа стартует и закрывается ошибкой (значит событие рестарта ловится). Сервис - стандартный Манифест + стандартный classes.dex Приложение - редактированный Манифест + деплойдим склеенный Classes.dex Отличие лишь в том что в bat-файле я заменил путь к исходному classes.dex на тот, который компилируется в Android\Debug Коллективный разум, помогай
  17. Аналогично добавил сервис к проекту и при перезапуске устройства программа говорит "В программе произошла ошибка" и закрывается. Теперь и при простом запуске также говорит... глюк на глюки, черт побери )
  18. Начинает немного проясняться в голове. С помощью Bitmap Style Designer стиль для Firemonkey открывается так - нажимаем в программе File -> New -> и выбираем из списка, например Android Dark Style. Изучаю дальше Можно ли с помощью этого редактора сделать, скажем, треугольные кнопки вместо прямоугольных? )
  19. Сам удивляюсь почему так выглядит zairkz, вот оно что, теперь более менее ясно. Тогда такой вопрос, где можно найти стиль для Firemonkey подобно AquaGraphite? В папке C:\Documents and Settings\All Users\Documents\Embarcadero\Studio\17.0\Styles\Android есть файлы *.fsf, но их не получается открыть. Как я понял есть стили .vsf - это для VCL, есть .fsf - это для Firemonkey (бинарные). А есть текстовый .style - вроде тоже для Firemonkey. BSD *.style, судя по всему, открывать не умеет
  20. Видимо у вас старые версии. Выложите свои версии на всякий случай В XSuperObject (3 дня назад менялся) сейчас строка 3089 PAnsiString(@Result)^ := AnsiString(JSON.Cast.AsString);
  21. Решил я изменить стиль AquaGraphite. В нем ProgressBar зеленого цвета, а решил сменить на голубой. Действую почти согласно сообщению Ярослава. Открыл в Bitmap Style Designer C:\Documents and Settings\All Users\Documents\Embarcadero\Studio\17.0\Styles\AquaGraphite.vsf Вижу следующее: Зеленые прямоугольники как раз отвечают за ProgressBar-ы. Я сохраняю этот png на диск, заменяю в графическом редакторе зеленые прямоугольники на голубые. В Bitmap Style Designer делаю Delete, а потом Add, добавляю новую картинку и сохраняю как AquaGraphiteNew.style Теперь в стандартном примере Object Pascal\Multi-Device Samples\User Interface\ControlsDesktop я подцепляю этот стиль... ProgressBar пропадает даже если подцепить AquaGraphite.style (что само по себе вызывает вопрос), НО если я подцепляю вновь созданный AquaGraphiteNew.style, то дизайн вообще "едет" у многих элементов! Извечный вопрос: Что делать?
×
×
  • Создать...