Trying to create several notifications that would fire at some specific days and hours

29 Views Asked by At

I'm very debutant in programming. It's the first time that I post here. Sorry if my question seems ridiculous.

I'm creating an ephemeride application, that display a quote for each day and that send a notification notification at some specific days and hours. But the notification doesn't occur.

For exemple, each 25th december, I would like that the app send a notification related to the event of the day, even if the application is closed.

I have try several thing, but it doesn't work.

Thanks for your help.

My current codes (where I have only tried to set the hour of the notification) :

MainActivity :

package fr.me.ephemeride;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        public static void startAlarmBroadcastReceiver(Context context) {
            Intent _intent = new Intent(context, AlarmBroadcastReceiver.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, _intent, PendingIntent.FLAG_IMMUTABLE);
            AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.HOUR_OF_DAY, 9);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        }

AndroidManifest :

        <receiver android:name=".AlarmBroadcastReceiver" />

AlarmBroadcastReceiver :

package fr.me.ephemeride;


import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;

public class AlarmBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        showNotification(context);

    }

    void showNotification(Context context) {
        Intent intent = new Intent(context, calendrier_japonais.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"My notification");
        builder.setContentTitle("Notification test");
        builder.setContentText("My text");
        builder.setSmallIcon(R.drawable.icon_nebra_foreground);
        builder.setAutoCancel(true);//permet de faire glisser la notification sur le côté afin de la faire disparaître
        builder.setContentIntent(pendingIntent);//permet d'aller à la classe souhaitée lorsque on tape sur la notification
        builder.setOnlyAlertOnce(true);//évite que que la même notification apparaisse plusieurs fois

        NotificationManagerCompat managerCompat = NotificationManagerCompat.from(context);
        managerCompat.notify(1,builder.build());
    }
}
0

There are 0 best solutions below