-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Весь контент Rusland
-
PS. Первое решение оказалось рабочим... не знаю почему у меня вчера отказывалось нормально работать Пользуйтесь. PPS. Надеюсь Embarcadero исправит этот баг в следующей версии и не придется делать столько телодвижений ) Странно что после закрытия программы сервис перестает слать координаты - значок GPS пропадает. Хотя в Настройки->Приложения->Работающие я вижу как процесс перезапускается.
-
Тоже использую SQLite Expert Professional 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 и менять параметры... но как в нем редактировать не понятно... инфы мало
-
Вот этот HotFix установить нужно после апдейта )
-
На радостях что сервис теперь может автоматически стартовать после перезагрузки системы (спасибо Ефимову Андрею), решил что пора научится получать координаты 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
-
gry, посмотрите это видео, может поможет Код я не проверял
-
У меня аппарат root-ован, но я все равно не знаю какой код писать чтобы проверить )
-
Это нужен отдельный сервер, что не очень то хорошо. Печаль Кодом на php поделитесь?
-
Можно узнать подробности про отсутствие open-ssl в android 6? Indy компоненты нельзя будет использовать? Как тогда быть если нужен SSL?
-
Попробуйте подключить через подклейку к classes.dex
-
Создал новый проект, повторил все действия, добавив лишь 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)
-
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; НО при закрытии приложения, процесс все равно восстанавливался! Спрашивается, а нужна ли вообще эта строчка?
-
У меня Android Device Monitor успевает найти устройство до загрузки и я вижу логи, вижу как проскакивает ошибка, но как только я жму кнопку Сохранения в файл, получаю файл 0 размера. Да и кроме того в логе видимо какое-то ограничение на количество записей - за считанные секунды моя ошибка пропадает и не успеваю ее посмотреть. Как расширить количество записей в логе?Оказывается прежде чем сохранять выделять надо через Ctrl+A
-
О, а это идея! Я действовал только по третьему сценарию как у вас: "Сервис - стандартный Манифест + стандартный 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 Коллективный разум, помогай
-
Начинает немного проясняться в голове. С помощью Bitmap Style Designer стиль для Firemonkey открывается так - нажимаем в программе File -> New -> и выбираем из списка, например Android Dark Style. Изучаю дальше Можно ли с помощью этого редактора сделать, скажем, треугольные кнопки вместо прямоугольных? )
-
Сам удивляюсь почему так выглядит 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, судя по всему, открывать не умеет
-
Видимо у вас старые версии. Выложите свои версии на всякий случай В XSuperObject (3 дня назад менялся) сейчас строка 3089 PAnsiString(@Result)^ := AnsiString(JSON.Cast.AsString);
- 15 ответов
-
- SuperObject
- Json
-
(и ещё 1 )
C тегом:
-
Решил я изменить стиль 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, то дизайн вообще "едет" у многих элементов! Извечный вопрос: Что делать?