0

私は上記の質問に対する答えを探すのに十分な努力をしましたが、これまでのところ努力は無駄でした。 私はalarmmanagerクラスの助けを借りてアラームを作成しました。これは定期的に(おそらく約5日間)通知を起動します。 以下は、ボタンのonClick()内で起こっているアラームの実装のためのコードです。特定の日付に繰り返される通知をキャンセルする方法

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

    Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION"); 
    notificationIntent.addCategory("android.intent.category.DEFAULT"); 

    PendingIntent broadcast = PendingIntent.getBroadcast(this, 100, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar cal = Calendar.getInstance(); 
    if(fromDateEtxt.getText().toString().length()>0) { 
     cal.add(Calendar.HOUR_OF_DAY, 10); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), 5 * 24 * 60 * 60 * 1000, broadcast); 

    } 

ブロードキャストレシーバのコード。

public class AlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Intent notificationIntent = new Intent(context, NotificationActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    stackBuilder.addParentStack(NotificationActivity.class); 
    stackBuilder.addNextIntent(notificationIntent); 

    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 

    Notification notification = builder.setContentTitle("Demo App Notification") 
      .setContentText("New Notification From Demo App..") 
      .setTicker("New Message Alert!") 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(pendingIntent).build(); 

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, notification); 
}} 

アラームの開始から離れたonClick()メソッドは、アクティビティも変更します。今私が直面している問題は、繰り返しアラームを止める方法を知りません。私は特定の日付にアラームを停止したい。第2に、アラームをキャンセルするためにalarm.cancelを使用するか、hereのように以前のアラームをキャンセルするために別のアラームを使用するか、混乱しました。これとは別に、別のアクティビティからアラームをキャンセルできるのか、ポイントが不要で、日付の制限を事前に設定できるのかを知りたいと思いましたか?

答えて

0

setRepeatingで使用したものと同じPendingIntentAlarmManagercancelを呼び出す必要があります。

例コード - 特定の日にそれをキャンセルあなたの条件については

Intent intent = new Intent(this, AlarmReceive.class); 
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

alarmManager.cancel(sender); 

、あなたはAlarmManagerを使用して別のアラームを設定することができます。 PendingIntent(たぶんBroadcastReceiver)を渡して、例のコードと同様の繰り返しアラームをキャンセルします。

+0

これは、特定の日付で取り消す場合、onClick()メソッドが存在するアクティビティが再度開かれることはないため、同じアクティビティまたは異なるアクティビティで新しいアラームを作成する必要があります。したがって、Onclick()メソッドで別のアラーム(キャンセルに使用されたアラーム)を作成すると、アラームが作成される前のアラーム日数が制限されますか? – rohanagarwal94

+0

正確なユースケースはわかりませんが、ボタンをクリックした時点でキャンセル日を知っていれば、アラームを作成してキャンセルすることもできます。 – jaibatrik

+0

事前にお手伝いしていただきありがとうございます。それがうまくいくことを望みます。 – rohanagarwal94

関連する問題