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

fsdb

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

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

  • Посещение

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

    3

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

  1. спасибо. я думал что из BroadcastReceiver нельзя установить задачу на запуск . это хорошее решение на мой взгляд... буду пробовать!!! to Andrey Efimov: Спасибо, извиняюсь, сообщения лишние удалил Update: Короче вот рабочий код - нормальный автозапуск отложенный!!! мое приложение больше не закрывает ОС и все работает отлично!!!! Отредактировано: package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import java.text.Format; import java.text.SimpleDateFormat; import java.util.Date; import android.app.AlarmManager; import android.app.PendingIntent; import android.os.Bundle; import android.os.PowerManager; import android.widget.Toast; import java.util.Calendar; import java.util.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.io.File; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); //создаем класс File f = new File("/sdcard/Android/data/com.embarcadero.PanelControl/files/ehs_setting/run_app.txt"); //файл - при наличии которого выполняется автозапуск if(f.exists()){ Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 30); //PendingIntent pi = PendingIntent.getBroadcast(context, 0, TestLauncher, 0); //AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi); Intent restartIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); PendingIntent intent1 = PendingIntent.getActivity(context, 0,restartIntent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); manager.set(AlarmManager.RTC, System.currentTimeMillis() + 30000, intent1); //TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); // TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(TestLauncher); } else { TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); } } } }
  2. Andrey Efimov понял. а как хотя бы на 5 секунд отложить старт? по моим ощущениям код просто игнорируется. Ява компилятор вроде ошибку не пишет, import java.*; ...................... long currenttime = System.currentTimeMillis(); long checktime = 0; // waits for 30 seconds (30000 milliseconds) while ((checktime = System.currentTimeMillis()) < (currenttime + 30000)){ //do nothing } Про AlarmManager я ознакомился в Вашей статье, но там получается что нужно знать точное время. в данном случае я не знаю точного времени рестарта ОС.
  3. подскажите пожалуйста отложенный запуск после старта ОС....... на данный момент код такой и НЕ РАБОТАЕТ старт именно прилоежния - закрывается после старта. сервис стартует норм. package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import java.io.File; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); //создаем класс File f = new File("/sdcard/Android/data/com.embarcadero.PanelControl/files/ehs_setting/run_app.txt"); //файл - при наличии которого выполняется автозапуск if(!f.exists()){ TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); } else { TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(TestLauncher); } } } }
  4. как узнать из сервиса запущено ли основное приложение? если запущено то не выводить уведомления в шторку например
  5. в общем не стал париться особо и просто сделал так: package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import java.io.File; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); //создаем класс File f = new File("/sdcard/Android/data/com.embarcadero.PanelControl/files/ehs_setting/run_app.txt"); //файл - при наличии которого выполняется автозапуск if(!f.exists()){ TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); } else { TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(TestLauncher); } } } }
  6. Добрый день, как сделать паузу, что бы приложение стартовало на много позже. например секунд через 30 после перегрузки ОС. пытался так - не вышло . У меня ОС убивает мое приложение почти сразу на старте - 1-3 секунды работы моей программы long currenttime = System.currentTimeMillis(); long checktime = 0; // waits for 30 seconds (30000 milliseconds) while ((checktime = System.currentTimeMillis()) < (currenttime + 30000)){ //do nothing } Intent AppLauncher = new Intent(); AppLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); AppLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(AppLauncher);
  7. Ребята, я перечитал тему и понял что сервис не может общаться с формой. но мне это не нужно. можно ли просто запустить из сервиса приложение - не передавая ему никакие данные... просто запустить?.. суть проблемы - сервис запустился после старта ОС. если есть файл run.txt на внешней карте, то запускает само приложение. если нету то ничего не далает. самое оптимальное это писать в BootCompletedReceiver.java код (склеивать classes.dex)? привел примерный псевдокод. я не знаю как на яве проверить есть ли такой файл.. а есть ли другие способы просто запустить из сервиса само приложение? или железно нет.??? дополнительно может ли сервис как то знать - запущено ли приложение основное - надо ли давать в шторку информацию или мы и так её видем в приложении package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); //запустили сервис. нужен всегда что бы давать в шторки сообщения >>>>>>>>>>>>>>>>>>>>>>>> if (fileexist("run.txt")) then { TestLauncher.setClassName(context, "com.embarcadero.firemonkey.FMXNativeActivity"); TestLauncher.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(TestLauncher); } >>>>>>>>>>>>>>>>>>>>>>>> //запустили сразу приложение если нужно } } }
  8. Огромное спасибо.я очень доволен. Напишу для всех пост. м.б. кому пригодится
  9. Ваш проект прекрасно запускается после растарта системы Насколько я понял упоминание есть в манифестах: Промежуточный: https://yadi.sk/i/X3XfifkfpvWHE Конечный: https://yadi.sk/i/gkMucscxpvWHn Вероятно вторая причина. classes.dex не правильно клеился или формируется. Хотелось бы узнать причину. Как понять, что файлы формируются не верные. Исходный код я скинул в личку. Спасибо!!!!
  10. Andrey Efimov спасибо что ответили, ошибок не получаю. пути в бат файле if x%ANDROID% == x set ANDROID=C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-sdk-windows\ set ANDROID_PLATFORM=%ANDROID%\platforms\android-22 set DX_LIB=%ANDROID%\build-tools\22.0.1\lib set EMBO_DEX="C:\DB\eHomeSmartMobile\eHSforAndroid\Application\Android\Debug\classes.dex" set PROJ_DIR=%CD% set VERBOSE=0 если удалить папку output то она каждый раз создается заново с файлами test_classes.dex, classes.dex, BootCompletedReceiver.class,test_classes.jar Скриншот конечного манифеста https://yadi.sk/i/EreQmlmtpvE7h Очень хотелось бы реализовать это по Вашей статье... у меня с сервисами вообще какая то большая проблема. ниразу не удалось Остановить работу по breakpoint в внутри сервиса. я перечитал форум и у одного формутчанина тоже так не работало - даже тут не работает дебагер м.б. проблема в этом как раз...... uses Androidapi.JNI.App; function TAndroidServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; begin Result := TJService.JavaClass.START_STICKY; end; В стандартных Samples где есть примеры по сервисам - тоже нигде не останавливается по breakpoint порекомендуйте пожалуйста что нибудь для решения проблемы
  11. Все равно не смог по статье повторить. прошу помочь и поправьте меня в манифесте добавил <receiver android:name="com.PanelControlReceiver.BootCompletedReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> в яве файле написал, запустил батник. все файлы создались. package com.PanelControlReceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class BootCompletedReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent TestLauncher = new Intent(); TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService"); context.startService(TestLauncher); } } } сервис запускаю так, он запускается, когда приложение закрываю - вижу что сервис дальше работает. после перезагрузки не стартует сервис заново ServiceHandle:=TLocalServiceConnection.Create; ServiceHandle.StartService('PanelControlService'); ServiceHandle.Free; замену класса сделал. вот скрин https://yadi.sk/i/FbVOPXOSpv3Qs права дал приложению . https://yadi.sk/i/WwAwCWEypv3iB надо ли давать права такие же сервису?
  12. решение: меняем на java -jar что бы понять что случилось - далее в гугл и.. делаем Downgrade jdk
  13. Все что угодно перепробывал не создается файл test_class.dex Windows 10, Delphi X Seattle,jdk1.8.0_66 я думаю ошибка тут: call %DX_LIB%\dx.jar --dex %VERBOSE_FLAG% --output=%PROJ_DIR%\output\dex\test_classes.dex --positions=lines %PROJ_DIR%\output\jar\test_classes.jar что делать?
  14. 1. как воспроизвести потоковое видео с IP камеры на Андройд 2. пример использования распознания речи google api на Андройд 3. пример передачи даных из сервиса в приложение / узнать из севиса что приложение работает
  15. Я попробывал на телефоне с другой версией андройда - 5.0.2 - то же самое . точка оставнова не срабатывает. подскажите порядок. может я что то элементарное не знаю, не так давно пользуюсь Firemonkey?.. В любом сервисе не могу поймать брекпоинт. Я в менеджере проекта активирую двойным кликом приложение (а не сервис) и запускаю приложение. это верно? или что то еще нужно делать?
  16. Rusland я так и понял. у вас update 1 есть?
  17. Добрый день. на андройде в D10 Seattle компилируется без ошибок и запускается пример. C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo я подозреваю что у меня не работает на телефоне данный пример. что должно произойти? я пытаюсь отловить событие тут, но оно просто не наступает . вообще любое приложение где я добавляю сервис и пытаюсь отдебажить в сервисе событие в данном участке кода - не удается поймать. в приложении получается. в приложениях сервис не появляется. как должно было быть? у меня опыта нет
  18. куда в сервисе прописать данный код что бы он выводил сообщения n:= form1.NotificationCenter1.CreateNotification; n.Name:='123'; n.Title:='567'; n.AlertBody:='890'; n.AlertAction:='qwe'; n.EnableSound:=true; form1.NotificationCenter1.ScheduleNotification(n);
  19. Вы получили в сервисе сигнал, создавайте локальное сообщение и будет там все и вибро и звук все как у Push. Затем по клику сообщения и откроется ваша программа. Здравствуйте , я не понимаю всех возможностей и поэтому спрошу. Хочу в сервисе для андройда (10 дельфи), обратиться по tcp/ip, послать через NotificationCenter сообщеение (ярлык) что есть новые данные. - по нему запустится приложение
  20. жаль что нет реализации без java, вроде обычная задача и в тоже время очень важная на мой взгляд в Delphi 10 не появилось иной реализации?
  21. как организовать автозапуск приложения после перезагрузки телефона? есть сторонние программы на плей маркете но хотелось бы собственными средствами
  22. ребята скажите как сделать так что бы после перезагрузки телефона сервис дальше работал допустим запустил я приложение. оно запустило сревис.. я вышел из приложения и смотрю что сервис реальноработает как на видео, но процессо рабочих пишет :0 открываю другие приложения чужие - там всегда висит кроме сервиса хотя бы 1 процесс. майл агент например: процессов 1, серовосв: 1. и так далее. т.е. везде процесс не закрыт. я выбрал LocalService как на видео. где прочесть что такое IntentLocalService
  23. создаю пустое приложение. кидаю кнопку и в ней пишу Application.FormFactor.Orientations := [TFormOrientation.InvertedLandscape]; после выполнения этого приложение закрывается. другие приложения где это есть - сразу на segmentation fault ругаются в Delpphi 10 Seatte, в Delphi xe8 работало. и почему combobox.text:=st1.Text; не добавляет позиций а делает combobox.text ипустым
  24. тот же самый баг. никак не могу сохранить настройки и запуститься в отладке. в Project Explorer выбрал debug
×
×
  • Создать...