簡體   English   中英

Android AlarManager通知重復

[英]Android AlarManager Notification repeating

在我的Android應用中..我發出了通知..實際上我的應用是命理應用..因此,我計划每天01:00 AM從應用發送通知,通知用戶可以使用新的預測...我能夠發送使用警報管理器進行通知。 但是我的問題是,每當用戶再次打開此通知時,通知就會反復出現。但是我需要每天發送一次通知。 用戶打開通知后,無需在同一天收到通知。 如果有人可以幫助請幫助。 我在下面給出我的代碼。

主要活動

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



    }

}

問題是您在onCreate()設置了警報,因此每次Activity啟動時,它都會為當前時間設置一個警報,該警報將立即觸發,啟動Activity,一次又一次地設置另一個警報。 您應該使用AlarmManager#setRepeating()方法設置警報一次,並以一天為間隔重復一次。

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

您不需要在每次創建Activity時都調用setRepeatingAlarm() ,因此您需要確定如何跟蹤是否設置了Activity。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM