package com.massive; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.media.MediaPlayer; import android.os.Build; import android.os.Vibrator; import android.util.Log; import androidx.annotation.NonNull; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import androidx.work.Worker; import androidx.work.WorkerParameters; public class AlarmWorker extends Worker { private static final String CHANNEL_ID = "MassiveAlarms"; public AlarmWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) { super(context, workerParams); } @NonNull @Override public Result doWork() { Log.d("AlarmWorker", "Doing work..."); createNotificationChannel(); Intent intent = new Intent(getApplicationContext(), AlarmModule.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_IMMUTABLE); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID) .setSmallIcon(R.drawable.autofill_inline_suggestion_chip_background) .setContentTitle("Rest complete.") .setContentText("Break time is over!") .setContentIntent(pendingIntent) .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_DEFAULT); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext()); notificationManager.notify(1, builder.build()); MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.argon); mediaPlayer.start(); // no need to call prepare(); create() does that for you Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(400); return Result.success(); } private void createNotificationChannel() { Log.d("AlarmWorker", "Creating notification channel..."); // 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) { int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "MassiveAlarms", importance); channel.setDescription("Alarms for the Massive application"); // Register the channel with the system; you can't change the importance // or other notification behaviors after this NotificationManager notificationManager = getApplicationContext().getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } } }