2011-07-08 7 views
5

以下のコードでアラームを作成してキャンセルすることができます。 複数のアラームを作成したいとします。アラーム時間はarraylistから来ます。このarraylistでは、私は各日付のアラームを作成したいと思います。キャンセルボタンを押すと、現在のアラームだけがキャンセルされます。どうしたらいいですか?どのように複数のアラームを作成できますか?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    setOneTimeAlarm(); 

    buttonCancel.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
      alarmManager.cancel(pendingIntent); 

      // Tell the user about what we did. 
      Toast.makeText(MainActivity.this, "Cancel!", Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

private void setOneTimeAlarm() { 
    Intent intent = new Intent(this, AReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
} 

答えて

3

私が作成したアプリの1つで、その方法で例を投稿します。

アラームを呼び出すときは、次のような追加のIDを送信する必要があります。 Tmpは一意のIDを持つオブジェクトです。

Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class); 

intent.setData(Uri.parse("timer:"+tmp.getId())); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0); 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent); 

、その後、あなたは、この行でIDを取得:

Long.parseLong(intent.getData().getSchemeSpecificPart()) 

だけでIDと同じ保留中の意図を作成し、(alarmmanager.cancelを呼び出す解除する場合)

編集:

ユーザーがクリックした項目の特定のアラームをキャンセルするには(ここではtmp.getIdが便利です)私はこのコードを使用しました。あなたはabと同じpendingIntentを作成する必要があると思います特定のアラームをキャンセルします。

Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class); 
intent.setData(Uri.parse("timer:"+tmp.getId())); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0); 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.cancel(pendingIntent); 

AlarmRecieverは私のBroadcastReceiverです。 DisplayActivityはアクティビティ自体です。

Long.parseLong(intent.getData().getSchemeSpecificPart()) 
+0

感謝が、私はAlarmManagerでの日付のリストを設定する方法を理解していません。 – realuser

+0

なぜあなたはリストを望みますか?これにより、いくつかの異なるアラームが作成され、カレンダーオブジェクトに異なる値を入力するだけです。私はすべてのアラームの参照をローカルデータベースに表示し、それらを表示してすべてキャンセルできるようにします。ループスルーし、alarmmanager.setをいくつかの呼び出しか、正確にはどういう意味ですか? –

+0

私は同じ問題があると思います。私は警報を発する場所からのサービスを持っています。複数のアラームを設定すると、最後のアラームだけが動作します。だから私はそれを得ることはありません:私は複数のアラームを設定する場合、私はIDを使用する必要があります、またはIDは目的をキャンセルするためだけですか? – Mario

1

これは、一意のIDを取得する方法についてDavidの返答の継続である:

それはAlarmRecieverにだ私は、次のコードを持っています。

一意のIDは、SQLITEテーブルから取得できます。リマインダの日付と時刻を格納するテーブルを作成するときは、AUTOINCREMENTの_ID列を使用します。行が挿入されると、この列には自動的に1つの番号と固有の番号が付けられます。また、この表は、デバイスの電源が切れていて、リマインダーを再作成したい場合に備えて、リマインダーを保管するのに役立ちます。デバイスのシャットダウン時には、アラームが失われると思います。 、テーブルからの日付を設定し、取得して利用Calendarオブジェクトを動作するように

CREATE TABLE IF NOT EXISTS reminder_datetime 
_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
NOTIF_DATETIME INTEGER; 

Calendar cal = Calendar.getInstance(); 

次にあなたは、cal.setTimeまたはcal.setTimeInMillis機能を使用することができます。 同様に、日付を取得する関数を取得します。

使用日付形式1を読めるし、日付をフォーマットする場合:答えデビッドのため

myDate = android.text.format.DateFormat.format("MM/dd/yyyy", cal.getTimeInMillis()).toString(); 
関連する問題