2014-09-19 65 views
2

在我的Android应用程序..我把一个通知..其实我的应用程序是一个命理应用程序..所以我打算每天从应用程序发送一个通知01.00 AM,新的预测可供用户使用。 ..我可以使用报警管理器发送通知。但我的问题是,每当用户再次打开此通知时,通知就会反复出现。但我需要通知在一天内发送一次。一旦用户打开通知,不需要在同一天发送通知。如果有人可以帮忙,请帮助。我在下面给我的代码。Android AlarManager通知重复

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); 



    } 

} 

回答

2

的问题是,你设置的报警onCreate(),所以每次活动开始时,它设置为当前时间发出报警,这立即启动,启动活动,再次设置另一个警报。您应该使用AlarmManager#setRepeating()方法将闹钟设置为一次,并且每天重复一次。

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

你不需要调用setRepeatingAlarm()每次创建活动的时间,所以你需要确定要如何跟踪它是否被设置。

+0

非常感谢!你是一个救生员。 @Mike你认为你可以在这里帮助我http://goo.gl/MAjgTh – eddy 2014-09-20 04:12:43