2016-10-10 3 views
0

Я ищу, чтобы создать функцию для приложения для Android, в котором я получаю уведомление каждые 25-е число месяца, указывая, что я должен выполнить определенную задачу.Android: Расписание уведомления о сообщении в определенную дату

Я был в состоянии отобразить уведомление, используя следующий код:

public class NotificationPublisher extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    long[] pattern = {0, 300, 0}; 
    PendingIntent pi = PendingIntent.getActivity(context,, intent, 0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.small_logo_ico) 
      .setContentTitle(context.getResources().getString(R.string.notification_title)) 
      .setContentText(context.getResources().getString(R.string.notification_content)) 
      .setVibrate(pattern) 
      .setAutoCancel(true); 

    mBuilder.setContentIntent(pi); 
    mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(, mBuilder.build()); 
} 

}

Сейчас эта система работает только тогда, когда у меня есть мое приложение с открытым и не позволяет мне показывать это когда приложение закрыто. Я искал вокруг и пришел к следующему: Android notification at specific date После проверки этого (часть расписания) я заметил, что он не работает, когда я закрываю приложение, так как я получаю сообщение об ошибке регистрации регистратора, делая это (отменить регистрацию) приводит к тому, что приемник отменяется, и уведомление не может быть показано.

код, используемый для расписания:

NotificationPublisher receiver = new NotificationPublisher(); 
    this.receiver = receiver; 
    IntentFilter filter = new IntentFilter("ALARM_ACTION"); 
    registerReceiver(receiver, filter); 

    Intent intent = new Intent("ALARM_ACTION"); 
    intent.putExtra("param", "My scheduled action"); 
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0); 
    // I choose 15s after the launch of my application 
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+15000, operation) ; 

Что я пропускаю, или я использую неправильные методы планирования уведомления на определенную дату? (Текущее уведомление назначено на запланированное 15 секунд в будущем, это только для тестирования, у меня есть функция, готовая отобразить это в определенную дату)

+1

http://stackoverflow.com/questions/31086226/show-a-notification-on-a-particular-date-and-time – HAXM

ответ

0

Используется для уведомления в середине месяца , Возможно, вы можете получить код ниже.

Calendar calendar = Calendar.getInstance(); 
     calendar.set(Calendar.DAY_OF_MONTH, 15); 
     calendar.set(Calendar.HOUR_OF_DAY, 12); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 
     calendar.set(Calendar.MILLISECOND, 0); 
     if (calendar.getTimeInMillis() < System.currentTimeMillis()) { 
      calendar.add(Calendar.DAY_OF_YEAR, 30); 
     } 
     Intent myIntent = new Intent(getApplicationContext(), MyReceiver.class); 
     myIntent.putExtra("NOTI_MSG",getString(R.string.notification_sidas)); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), NOTI_REQ_CODE_SIDAS, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY * 30, pendingIntent); 
    } 
+0

Я изменил последнюю часть к: «alarmManager.setRepeating (AlarmManager.RTC, System.currentTimeMillis() + 3000, 2000, pendingIntent); " и остальное остальное одинаково (конечно, при необходимости меняя ссылки), по какой причине это не могло работать? – Gerton

Смежные вопросы