#java #android #service #alarmmanager #handler
#java #Android #Обслуживание #alarmmanager #обработчик
Вопрос:
Целевой API Java 30, Минимальный API 19
У меня есть сигналы тревоги, которые создаются потоком обработчика внутри моей службы переднего плана. У меня есть сигналы тревоги, которые устанавливаются в обработчике на основе пользовательских вводов. Я могу подтвердить, что время, передаваемое сигналам тревоги, указано правильно. Вот класс объекта alarm:
public class StartAlarmObject {
private String name;
private Context context;
private int index;
private int day;
private long time;
private NotificationManagerCompat notificationManager;
private ArrayList<RestrictionObject> restrictions = new ArrayList<>();
private ReadAndWriteRestrictions readAndWriteRestrictions = new ReadAndWriteRestrictions();
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
public StartAlarmObject (String name, Context context, int index, int day, long time)
{
this.name = name;
this.context = context;
this.index = index;
this.day = day;
this.time = time;
}
public void startAlarm() {
System.out.println("starting alarm/alarm setting...");
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlertReceiver.class);
intent.putExtra("index", index);
pendingIntent = PendingIntent.getBroadcast(context, (index * 100) (day * 10), intent, 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, time, pendingIntent);
System.out.println("setting exact and allowing while idle");
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
System.out.println("setting exact");
}
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
System.out.println("just setting");
}
}
public void cancelAlarm()
{
if (alarmManager!= null) {
alarmManager.cancel(pendingIntent);
}
}
public String getName() {
return name;
}
}
Я ожидаю, что я получаю инструкции println «точная настройка и разрешение во время ожидания», но я никогда не вижу никакой реакции от класса широковещательного приемника, которому я передаю намерение:
package com.example.gotimejavaversion;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("alert received");
Intent serviceIntent = new Intent(App.getContext(), TheRestrictor.class);
serviceIntent.putExtra("caller", "alarm");
System.out.println("The alarm reached the receiver");
context.stopService(serviceIntent);
context.startService(serviceIntent);
}
}
Что мне нужно, чтобы связаться с широковещательным приемником или перезапустить службу, когда сработает сигнал тревоги?
Надеюсь, я просто упускаю что-то простое.
Спасибо!
Комментарии:
1. Зарегистрирован ли у вас приемник в манифесте?
2. Да, я знаю. Я также увеличил его приоритет на всякий случай, но, похоже, это не возымело никакого эффекта. ` <приемник android: name=». AlertReceiver» android: включено =»true» android: приоритет =»999″> </ receiver> `