Лидеры
Популярный контент
Показан контент с высокой репутацией 23.02.2017 в Сообщения
-
[Android] Почему не работает лог в сервисе?
Andrey Efimov отреагировал Равиль Зарипов (ZuBy) за вопрос
monitor.bat в SDK лежит, запустите его1 балл -
Редактирование FMX.Platform.Win
Winexcel отреагировал Равиль Зарипов (ZuBy) за вопрос
да, иначе компилятор берет dcu, а не pas файл1 балл -
По поводу "как подключать JAVA класс": процитирую ответ в блоге: По поводу Цитата из ответа в блоге: Расчёт был на то, что читатель хотя бы поинтересуется в официальной справке, что делают два этих метода. К слову, по названию методов уже понятно, для чего каждый из них предназначен. Но раз есть один прецедент, то может быть и второй. Поэтому я уже добавил прямое указание различий у двух примеров. p.s. Не нужно заниматься кросспостингом. Update. Все три статьи обновлены. Конкретно в этой статье постарался объяснить в тексте поверхностные отличия двух примеров, которые мне, до сегодняшнего дня казались очевидными. Чуть позже выложу ещё всё на ГитХаб, чтобы не терялось1 балл
-
TColorAnimation вообще работает с кнопками??
Major отреагировал Равиль Зарипов (ZuBy) за вопрос
ну вот, я вам ответил в предыдущем сообщении почему так происходит1 балл -
TColorAnimation вообще работает с кнопками??
Major отреагировал Равиль Зарипов (ZuBy) за вопрос
TintColor не во всех стилях есть, в дефалтном на Windows точно нету. на какой платформе тестите?1 балл -
Привет. Я тут узнал что оказывается начиная с XE7 не нужно создавать Dex файл затем подменять его на classes.dex. Достаточно создать Jar файл и подключить его к проекту. А Dex файлы нужны для XE5 и XE6. Узнал я это из этого вопроса на stackoverflow. Пожалуйста Вы не могли бы обновить статью? Просто дописав эту заметку? На мой взгляд это важно. Я также обновил бат файл, он будет примерно такой: @echo off setlocal if x%ANDROID% == x set ANDROID=c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows set ANDROID_PLATFORM=%ANDROID%\platforms\android-24 set PROJ_DIR=%CD% set VERBOSE=0 echo. echo Compiling the Java service activity source files echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\TestReceiver\AlarmReceiver.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com echo. echo Now we have the end result, in directory output\jar\ pause1 балл
-
Привет. Я тут узнал что оказывается начиная с XE7 не нужно создавать Dex файл затем подменять его на classes.dex. Достаточно создать Jar файл и подключить его к проекту. Я проверил на новом проекте - все прекрасно работает. Проект автозапускается из AlarmManager (делал на основе этой статьи ) .А Dex файлы нужны для XE5 и XE6. Узнал я это из этого вопроса на stackoverflow. Пожалуйста Вы не могли бы обновить статью? Просто дописав эту заметку? На мой взгляд это важно. Я также обновил бат файл, он будет примерно такой: @echo off setlocal if x%ANDROID% == x set ANDROID=c:\Users\Alex\Documents\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows set ANDROID_PLATFORM=%ANDROID%\platforms\android-24 set PROJ_DIR=%CD% set VERBOSE=0 echo. echo Compiling the Java service activity source files echo. mkdir output 2> nul mkdir output\classes 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=-verbose javac -source 1.7 -target 1.7 %VERBOSE_FLAG% -Xlint:deprecation -cp %ANDROID_PLATFORM%\android.jar -d output\classes src\com\TestReceiver\AlarmReceiver.java echo. echo Creating jar containing the new classes echo. mkdir output\jar 2> nul if x%VERBOSE% == x1 SET VERBOSE_FLAG=v jar c%VERBOSE_FLAG%f output\jar\test_classes.jar -C output\classes com echo. echo Now we have the end result, in directory output\jar\ pause Также еще один ньюанс. Для варианта 2 никакой Dex файл не нужен. Также не нужен и Jar файл. Также ничего не нужно в манифест добавлять, т.к. вызывается activity напрямую, без BroadcastReceiver.Но это только для варианта 2. Для первого варианта (Broadcast) все это нужно.Я проверял на новом проекте с вариантом 2 - все работает.1 балл
-
1 балл
-
После "сна" программа с сервисом не стартует
Евгений Корепов отреагировал Rusland за вопрос
Всем кто в сервис передает параметры, типа: procedure TFrmMain.StartService(); var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), TAndroidHelper.StringToJString('com.embarcadero.services.TestRemoteServ')); LIntent.setAction(StringToJString('StartService')); TAndroidHelper.Activity.startService(LIntent); end; function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopService')) then begin Log('START_NOT_STICKY'); Result := TJService.JavaClass.START_NOT_STICKY; end else // if Intent.getAction.equalsIgnoreCase(StringToJString('StartService')) then begin Log('START_STICKY'); Result := TJService.JavaClass.START_STICKY; end; end; обязательно проверяйте Intent на nil ! Когда система убивает ваше приложение из-за нехватки памяти и перезапускает сервис, то на Intent.getAction происходит Segmentation fault и сервис остается в подвешенном состоянии (на процессоре ARM в Приложения - Работающие у меня отображается как-будто сервис нормально перезапустился, а вот на процессоре Intel - видно как сервис находится в вечном перезапуске). И естественно хост-приложение не может нормально стартануть. Делаем примерно так: function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin if Intent<>nil then begin if Intent.getAction.equalsIgnoreCase(StringToJString('StopService')) then begin Log('START_NOT_STICKY'); Result := TJService.JavaClass.START_NOT_STICKY; end else // if Intent.getAction.equalsIgnoreCase(StringToJString('StartService')) then begin Log('START_STICKY'); Result := TJService.JavaClass.START_STICKY; end; end else begin Log('RESTART BY SYSTEM'); Result := TJService.JavaClass.START_STICKY; end; end;1 балл -
Запрет разрешений экранов
Евгений Корепов отреагировал Andrey Efimov за вопрос
Да, пробуйте. Будут ошибки, пишите сюда, какие именно. Я бы проверил сам, но планшета у меня нет... Всё там правильно написано, как раз по вашей теме Declaring an App is Only for Tablets: Манифест: <manifest ... > <supports-screens android:smallScreens="false" android:normalScreens="false" android:largeScreens="true" android:xlargeScreens="true" android:requiresSmallestWidthDp="600" /> ... <application ... > ... </application> </manifest> В данном случае, единственно верным является этот вариант, через манифест, т.к. подобная ситуация уже предусмотрена разработчиками OC Android. Тот вариант, который я предложил, теперь является "костылём".1 балл -
Android Service
Евгений Корепов отреагировал Rusland за вопрос
Можно какой-нибудь пример для ясности?1 балл -
Android Service
Евгений Корепов отреагировал Brovin Yaroslav за вопрос
Вообще можно напрямую вызывать методы сервиса. Так как они находятся в одной области памяти и имеют прямой доступ друг к другу. Для этого достаточно создать TLocalServiceConnection, установить связь с сервисом через BindService и получить прямой доступ к сервису через TLocalServiceConnection.LocalService1 балл -
Кто нибудь использовал Remote Service ?
Евгений Корепов отреагировал YuraProff за вопрос
Кто нибудь использовал Remote Service. Есть ли у кого нибудь пример использования, или какая нибудь информация, поскольку в Demo проектах ничего я не нашел про Remote Service, только про Local Service. Также можете мне далекому по народному объяснить: в дизайнере создания сервиса есть 4 типа, есть описание на английском, только ни как не могу понять практическое применение каждого из них. Спасибо.1 балл