Я пытаюсь создать часть фитнес-приложения, которое будет напоминать пользователю выполнять свои ежедневные упражнения в выбранное время.Это использует AlarmManager для создания ежедневного будильника, который создаст уведомление, которое появится в выбранное время.
Когда приходит время будильника, уведомление не поступает.Я протестировал уведомление, и оно появится, если оно будет помещено в действие при нажатии кнопки.
Должен ли я использовать extends BroadcastReceiver вместо extends Service ?
Создание будильника:
public void SaveAlarm(View V) {
Intent myIntent = new Intent(SetAlarm.this, NotifyService.class);
AlarmManager mAlarmManager = (AlarmManager) this.getSystemService(ALARM_SERVICE);
mPendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
//Create Alarm Time in calendar
Calendar mCalendar = Calendar.getInstance();
mCalendar.setTimeInMillis(System.currentTimeMillis());
mCalendar.set(Calendar.HOUR_OF_DAY, AlarmHour);
mCalendar.set(Calendar.MINUTE, AlarmMinute);
//Set alarm to repeat ever 24hrs
mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, mPendingIntent);
//Save Alarm to shared preferences
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("AlarmHour", AlarmHour);
editor.putInt("AlarmMinute", AlarmMinute);
editor.commit();
//Notify user it's been saved
Toast.makeText(this, "Alarm Saved", Toast.LENGTH_LONG).show();
//Switch view
Intent intent = new Intent(SetAlarm.this, Home.class);
startActivity(intent);
}
Класс для создания уведомления:
public class NotifyService extends Service {
@Override
public IBinder onBind(Intent Intent) {
return null;
}
@Override
public void onCreate() {
createNotificationChannel();
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "Workout")
.setSmallIcon(R.drawable.common_google_signin_btn_text_light)
.setContentTitle("Workout Time!")
.setContentText("Time to do your daily workout.")
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
notificationManager.notify(1, builder.build());
}
private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Workout";
String description = "Workout";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("Workout", name, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}