Reputation: 1135
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);
}
}
Upvotes: 2
Views: 1120
Reputation: 39201
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.
Upvotes: 3