简体   繁体   中英

Android AlarManager Notification repeating

In My Android app.. I put a notification.. actually my app is a numerology app.. so I am planning to send a notification from app everyday 01.00 AM that new prediction is available for the user... I am able to send notification using alarm manager. But my problem is whenever user open this notification again notification is coming repeatedly.. But I need notification to be send once in a day. Once user opens the notification no need of coming the notification in the same day. If anyone can help please help. I am giving my code below.

MainActivity

AlarmManager am;

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        //Context context=MainActivity.this;


        am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        setRepeatingAlarm();


private void setRepeatingAlarm() 
    {

        // TODO Auto-generated method stub
        Calendar calendar = Calendar.getInstance();



          calendar.set(Calendar.HOUR_OF_DAY, 1);
          calendar.set(Calendar.MINUTE, 00);
          calendar.set(Calendar.SECOND, 0);
          calendar.set(Calendar.AM_PM,Calendar.AM);

        Intent intent = new Intent(this, AlarmReceiver.class);
         // PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
         // intent, PendingIntent.FLAG_CANCEL_CURRENT);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent,0);
         // am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
         //  (1000 * 1000), pendingIntent);
            am.set(1, System.currentTimeMillis(),pendingIntent);
          System.out.println("Calling Alaram...");

    }

MyReceiver

public class AlarmReceiver extends BroadcastReceiver 

{
    private final String SOMEACTION = "com.jocheved.alarm.ACTION";

    @Override
    public void onReceive(Context context, Intent intent) {
        generateNotification(context,"You have new predictions");
        String action = intent.getAction();
        if (SOMEACTION.equals(action)) {
            //do what you want here
            generateNotification(context,"You have new Predictions");


        }
    }

    @SuppressWarnings("deprecation")
    private void generateNotification(Context context, String message) {
          System.out.println(message+"++++++++++2");
          int icon = R.drawable.ic_launcher;
          long when = System.currentTimeMillis();
          NotificationManager notificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
          Notification notification = new Notification(icon, message, when);
          String title = context.getString(R.string.app_name);
         // String subTitle = context.getString(R.string.app_name);
          String subTitle = "You have new Predictions";
          Intent notificationIntent = new Intent(context, DirectCalculation.class);
          notificationIntent.putExtra("content", message);
          PendingIntent intent = PendingIntent.getActivity(context, 0,notificationIntent, 0);
          notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);

          notification.setLatestEventInfo(context, title, subTitle, intent);
          //To play the default sound with your notification:
          notification.defaults |= Notification.DEFAULT_SOUND;
          notification.flags |= Notification.FLAG_AUTO_CANCEL;
          notification.defaults |= Notification.DEFAULT_VIBRATE;
          notificationManager.notify(0, notification);



    }

}

The problem is that you're setting the alarm in onCreate() , so every time the Activity starts, it sets an alarm for the current time, which fires immediately, starts the Activity, sets another alarm... over and over again. You should use the AlarmManager#setRepeating() method to set the alarm once, with a repeating interval of a day.

alarmMgr.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(),
    AlarmManager.INTERVAL_DAY, intent);

You don't need the call to setRepeatingAlarm() each time the Activity is created, so you'll need to determine how you want to keep track of whether it is set.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM