Nano Hash - криптовалюты, майнинг, программирование

диспетчер тревог не запускает андроид

Ну, в моем приложении я пробую следующую функциональность. Я хочу, чтобы в зависимости от даты и времени пользователь получал уведомления.

Например:

  1. 9 сентября, 19.13 получить уведомление с сообщением1
  2. 10 сентября, 07.30, сообщением 2,
  3. тот же день, но 11.50, с сообщением 3 и так далее...

Я использовал будильник и панель уведомлений, но это сработало только для первого. Поэтому я искал это, и было сказано, что я должен использовать диспетчер повторяющихся сигналов тревоги.

Прежде чем опубликовать свой код, я хочу прояснить некоторые вещи: 1) я думаю, что он должен работать так: я должен каждые 1-2 минуты проверять, который сейчас час, извлекать мое следующее «время» из массива, который события хранятся, и установить для этого будильник, верно? Затем, учитывая, что этот кусок кода будет запускаться каждые 1-2 минуты, я снова проверю, выберу следующее событие, установим будильник на это время и так далее.

Я прав?

Итак, начнем с того, что я пытаюсь реализовать диспетчер повторяющихся сигналов тревоги, который каждую 1 минуту будет отображать мне всплывающее сообщение (если я сделаю это и заменю всплывающее сообщение на get_next_event() и set_next_notification(), я думаю, что работа будет выполнена. - Эти функции отлично работают в моем проекте с установленным только одним будильником).

Но проблема в том, что когда я запускаю свой сервис, я ничего не вижу.

вот мой код:

Alarm.java

public class Alarm extends BroadcastReceiver 
    {    
         @Override
         public void onReceive(Context context, Intent intent) 
         {   
             Toast.makeText(context, "Starting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

             PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
             PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
             wl.acquire();

             // Put here YOUR code.
             Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example

             wl.release();
         }

     public void SetAlarm(Context context)
     {
         Toast.makeText(context, "Setting Alarm Manager", Toast.LENGTH_LONG).show(); // For example

         AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent i = new Intent(context, Alarm.class);
         PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
         am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 , pi); // Millisec * Second * Minute
     }

     public void CancelAlarm(Context context)
     {
         Intent intent = new Intent(context, Alarm.class);
         PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
         AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         alarmManager.cancel(sender);
     }

YourService.java

public class YourService extends Service
{
    Alarm alarm = new Alarm();
    public void onCreate()
    {
        super.onCreate();    
        Toast.makeText(YourService.this, "Service Created", Toast.LENGTH_LONG).show(); // For example

    }

    public void onStart(Context context,Intent intent, int startId)
    {
        Toast.makeText(YourService.this, "Setting from Service", Toast.LENGTH_LONG).show(); // For example

        alarm.SetAlarm(context);
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        return null;
    }
}

Демоактивность.java

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    buttonStart = (Button) findViewById(R.id.buttonStart);
    buttonStop = (Button) findViewById(R.id.buttonStop);

    buttonStart.setOnClickListener(this);
    buttonStop.setOnClickListener(this);
  }

  public void onClick(View src) {
    switch (src.getId()) {
    case R.id.buttonStart:
        Toast.makeText(ServicesDemo.this, "Button Pressed", Toast.LENGTH_LONG).show(); // For example
      Log.d(TAG, "onClick: starting srvice");
      startService(new Intent(this, YourService.class));
      break;
    case R.id.buttonStop:
      Log.d(TAG, "onClick: stopping srvice");
      stopService(new Intent(this, YourService.class));
      break;
    }
  }

Итак, я нажимаю кнопку, я вижу, что «кнопка нажата», я вижу, что «служба создана», но тогда ни один из тостов, которые запустил будильник, не отображаются. И, конечно же, я ничего не вижу каждую 1 минуту.

вот мой манифест.

<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">

    <activity android:name=".ServicesDemo" android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    <service android:enabled="true" android:name=".YourService" />
<receiver  android:process=":remote" android:name="Alarm"></receiver>

  </application>
  <uses-sdk android:minSdkVersion="8" />
      <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

</manifest> 

Итак, что мне нужно изменить в моем коде или в манифесте?


Ответы:


1

Я предлагаю вам использовать для этого AlarmManager: http://developer.android.com/reference/android/app/AlarmManager.html .

09.09.2012
  • у вас есть ссылки-учебники? Я видел это, но каждый образец, который я видел в Интернете, похоже, не работает. 09.09.2012
  • это именно тот код, который я использовал в своем посте. Но это не работает. 09.09.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..