Перейти к содержанию
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. в общем не стал париться особо и просто сделал так:

    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);
    }
    
    
      }
    
    
     }
      
    }
    
    
  5. Добрый день, как сделать паузу, что бы приложение стартовало на много позже. например секунд через 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);
  6. Ребята, я перечитал тему и понял что сервис не может общаться с формой. но мне это не нужно. можно ли просто запустить из сервиса приложение - не передавая ему никакие данные... просто запустить?..

    суть проблемы - сервис запустился после старта ОС. если есть файл 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); }
    >>>>>>>>>>>>>>>>>>>>>>>>  
    //запустили сразу приложение если нужно
    
    
      }
    
    
     }
      
    }
  7. Огромное спасибо.я очень доволен. Напишу для всех пост. м.б. кому пригодится

     

     

    неправильно указали имя пакета для java класса, т.е. если указано

    com.PanelControlReceiver

    то и сам java файл должен лежать в папке eHSforAndroid\Application\java\src\com\PanelControlReceiver\

  8.  
    Ваш проект прекрасно запускается после растарта системы
     
    Насколько я понял упоминание есть в манифестах:
     
    Промежуточный:
     
    Конечный: 
     
    Вероятно вторая причина. classes.dex не правильно клеился или формируется. Хотелось бы узнать причину. Как понять, что файлы формируются не верные.
     
    Исходный код я скинул в личку. 
    Спасибо!!!!
  9. 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

    порекомендуйте пожалуйста что нибудь для решения проблемы

  10. Все равно не смог по статье повторить. прошу помочь и поправьте меня

     

    в манифесте добавил

     <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
     надо ли давать права такие же сервису?
     
  11. Все что угодно перепробывал не создается файл 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
     
    что делать?
     
     
    post-1783-0-74990700-1457030359_thumb.pn
  12. 1. как воспроизвести потоковое видео с IP камеры на Андройд

    2. пример использования распознания речи google api на Андройд

    3. пример передачи даных из сервиса в приложение / узнать из севиса что приложение работает

  13. Я попробывал на телефоне с другой версией андройда - 5.0.2 - то же самое . точка оставнова не срабатывает.

    подскажите порядок. может я что то элементарное не знаю, не так давно пользуюсь Firemonkey?..

    В любом сервисе не могу поймать брекпоинт.

    Я в менеджере проекта активирую двойным кликом приложение (а не сервис) и запускаю приложение. это верно? или что то еще нужно делать?

  14. Добрый день. на андройде в D10 Seattle компилируется без ошибок и запускается пример.

    C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidNotificationServiceDemo

     

    я подозреваю что  у меня не работает на телефоне данный пример. что должно произойти?

     

    я пытаюсь отловить событие тут, но оно просто не наступает . dd32f8ba10.jpg

     

     

     

     

    вообще любое приложение где я добавляю сервис и пытаюсь отдебажить в сервисе событие в данном участке кода -  не удается поймать.

    в приложении получается. в приложениях сервис не появляется.

    как должно было быть? у меня опыта нет

  15. Вы получили в сервисе сигнал, создавайте локальное сообщение и будет там все и вибро и звук все как у Push.

    Затем по клику сообщения и откроется ваша программа.

     

    Здравствуйте , я не понимаю всех возможностей и поэтому спрошу.

    Хочу в сервисе для андройда (10 дельфи), обратиться по tcp/ip, послать через NotificationCenter сообщеение (ярлык) что есть новые данные. - по нему запустится приложение

  16. ребята скажите как сделать так что бы после перезагрузки телефона сервис дальше работал

    допустим запустил я приложение. оно запустило сревис.. я вышел из приложения и смотрю что сервис реальноработает как на видео, но процессо рабочих пишет :0

    открываю другие приложения чужие - там всегда висит кроме сервиса хотя бы  1 процесс.

    майл агент например: процессов 1, серовосв: 1. и так далее. т.е. везде процесс не закрыт.

     

    я выбрал LocalService как на видео. где прочесть что такое IntentLocalService

  17. создаю пустое приложение. кидаю кнопку и в ней пишу Application.FormFactor.Orientations := [TFormOrientation.InvertedLandscape];

    после выполнения этого приложение закрывается.

    другие приложения где это есть  - сразу на segmentation fault ругаются

    в Delpphi 10 Seatte, в Delphi xe8 работало.

    и почему combobox.text:=st1.Text; не добавляет позиций а делает combobox.text ипустым

×
×
  • Создать...