На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> автозапуск сервиса каждые 10 секунд
    Добрый день. я пишу программу на дельфи, однако там можно подцепить ява
    мне нужно что бы мой сервис стартовал каждые 10 секунд. прошу помочь исправить вот эту часть:
    ExpandedWrap disabled
       Intent restartIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
          PendingIntent intent1 = PendingIntent.getService(context, 0,restartIntent, 0);
          AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),10*1000,intent1);



    привожу общий код, все остальное в нем работает кроме участка что выше:
    ExpandedWrap disabled
      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/profile/working/autorun_app.txt");
      //файл - при наличии которого выполняется автозапуск
       
       if(f.exists()){
          
          
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
      calendar.add(Calendar.SECOND, 30);
       
       
       
       
          
                  
                  
                  
                   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);
      //запуск приложения
       
      }
       
       
       
       
       
       
          Intent restartIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
          PendingIntent intent1 = PendingIntent.getService(context, 0,restartIntent, 0);
          AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
          manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),10*1000,intent1);
       
          
          
          
          
          
       
       
       
       
          
       // TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService");
       // context.startService(TestLauncher);
       // Обычный запуск сервиса
       
       
       
        }
       
       
       }
        
      }
      Смотрите в сторону ScheduledExecutorService. Почищеный код из реального проекта вам в помощь.
      ExpandedWrap disabled
        import java.util.concurrent.ScheduledExecutorService;
         
        ...
         
        private ScheduledExecutorService pingerScheduler = newSingleThreadScheduledExecutor();
         
             public void init() {
                pingTask = new PingTask();
                pingerScheduler.scheduleAtFixedRate(pingTask, TIME_TO_DELAY_FIRST_EXECUTION, configParameters.getWebsocketPingTimeout(), TimeUnit.MILLISECONDS);
            }
         
            @PreDestroy
            public void destroy() {
                pingerScheduler.shutdownNow();
            }
         
        private class PingTask implements Runnable {
         
                @Override
                public void run() {
                    try {
                        ...
                        }
                    }
                    catch (Exception e) {
                        ...
                    }
                }
            }
        Астарот, спасибо за ответ. а чем плох AlarmManager ? Разве нельзя просто в нем сделать автостарт через 10 секунд каждые.
        у меня сервис выполняет полезную работу и останалвиается. я бы хотел его запускать каждые 10 секунд например что бы он делал полезную работу
          Цитата Emmys @
          Астарот, спасибо за ответ. а чем плох AlarmManager ? Разве нельзя просто в нем сделать автостарт через 10 секунд каждые.
          у меня сервис выполняет полезную работу и останалвиается. я бы хотел его запускать каждые 10 секунд например что бы он делал полезную работу

          Наверное ничем не плох, кроме того, что он у вас не работает :) Я с ним дела не имел, просто мне кажется, что если что-то нужно запускать аж каждые 10 секунд, то это нужно запустать один раз, и пусть оно каджые 10 секунд что-то делает. Отдельный поток самое то, но если в вашем случае он не подходит, то ничем не помогу.
            Астарот, мне удалось из приложения AlarmManager заставить вызывать каждые 10 секунд BootCompletedReceiver onReceive. но встала другая проблема... чуть ниже опишу..
            я сначала в нутри сервиса пытался выполнять все что мне нужно не завершая его в потоке, но потом понял что из за критических вещей он и сам может закрыться в принципе с ошибкой или ОС закроет и работа остановится...
            а так вроде каждый раз свежая прогрузка....
            у меня пока что большие проблемы с JAVA. никогда не работал. на данный момент на следующем этапе:
            Приложение после перезапуска нормально самостоятельно запускается.
            Вызов из приложения onReceive класса BootCompletedReceiver - происходит нормально, но на строчке (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) у меня все рушится.. если закоментировать то все ок, но мне нужно обязательно знать когда только ОС загрузилась...
            не подскажите в чем может быть дело? почему при вызове из основого приложения рушится именно на этой строчке. что же не так.?


            ExpandedWrap disabled
              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.text.DateFormat;
              import java.text.SimpleDateFormat;
              import java.util.Calendar;
              import java.io.File;
               
              import android.media.Ringtone;
              import android.media.RingtoneManager;
              import android.net.Uri;
              import android.util.Log;
               
               
               
               
              public class BootCompletedReceiver extends BroadcastReceiver {
                  
                  
               @Override
               public void onReceive(Context context, Intent intent) {
                  
               
              Intent TestLauncher = new Intent();
              //создаем класс
                  
                  
                  
                  
              TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService");
              context.startService(TestLauncher);
              //Обычный запуск сервиса
                  
                  
                  
                  
               
               // if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                
               
               
               File f = new File("/sdcard/Android/data/com.embarcadero.PanelControl/files/ehs_setting/profile/working/autorun_app.txt");
              //файл - при наличии которого выполняется автозапуск
               
               if(f.exists()){
                  
                  
              Calendar calendar = Calendar.getInstance();
              calendar.setTimeInMillis(System.currentTimeMillis());
              calendar.add(Calendar.SECOND, 30);
               
               
               
               
                  
                          
                          
                          
                  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);
              //обычный запуск приложения
               
              }
               
               
               
               
               
               
              //  Intent restartIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
              //  PendingIntent intent1 = PendingIntent.getService(context, 0,restartIntent, 0);
              //  AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
              //  manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),10*1000,intent1);
              //не рабочая часть по запуску сервиса
                  
                  
                  
                  
                  
               
               
               
               
                  
               // TestLauncher.setClassName(context, "com.embarcadero.services.PanelControlService");
               // context.startService(TestLauncher);
               // Обычный запуск сервиса
               
               
               
               // }
               
               
               }
                
              }
            Сообщение отредактировано: Emmys -
              Цитата Emmys @
              Вызов из приложения onReceive класса BootCompletedReceiver - происходит нормально, но на строчке (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) у меня все рушится.. если закоментировать то все ок, но мне нужно обязательно знать когда только ОС загрузилась...
              не подскажите в чем может быть дело? почему при вызове из основого приложения рушится именно на этой строчке. что же не так.?

              Когда рушится что-то же говорит? Что именно?
                Астарот - к сожалению я этого не вижу. просто что приложение будет закрыто. отследить не получается.
                а нельзя ли сделать две функции с OnReciver ?? в одном файле, что бы из программы на телефоне вызывать одну функцию а при загруузке другую..... просто я пыытался и он мне говорит раз функция публичная то нужно делать 2 разных файла. а мне нельзя 2 файла. только в одном так как у меня потом не срастется с дельфи
                Сообщение отредактировано: Emmys -
                  Я смог наконец получить логи.... научили умные люди. скажите почему он так ругается на этот код
                  Unable to start service Intent U=0: not found
                  ошибка по ссылке https://yadi.sk/i/KheEgK8UqYTSp
                  ExpandedWrap disabled
                    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
                    Intent intent2=new Intent(context, BootCompletedReceiver.class);
                    PendingIntent pi= PendingIntent.getService(context,0, intent2,0);
                    MainActivity.pi.cancel();
                    am.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000,pi);
                  Сообщение отредактировано: Emmys -
                    Ну... что-то он нот фаунд. Лично я дельфовые сервисы из ждавы не запускал, даже близко не представляю куда копать.
                      Астарот, спасибо разобрался. не хватало setClassName...
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0335 ]   [ 16 queries used ]   [ Generated: 29.03.24, 12:23 GMT ]