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

2 に答える 2

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 が便利です)、このコードを使用しました。特定のアラームをキャンセルできるようにするには、同じ 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())
于 2011-07-08T07:15:12.120 に答える
1

これは、一意の ID を取得する方法に関する David の返信の続きです。

一意の ID は、SQLITE テーブルから取得できます。リマインダーの日付と時刻を格納するテーブルを作成するときに、_ID 列に AUTOINCREMENT を指定します。行が挿入されると、この列は自動的にワンアップ番号と一意の番号を取得します。この表は、デバイスの電源がオフになっていてリマインダーを再度作成したい場合に備えて、リマインダーを保存するのにも役立ちます。デバイスのシャットダウン時に、アラームが失われると思います。

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

テーブルから日付を設定および取得するには、Calendar オブジェクトを使用します。

Calendar cal = Calendar.getInstance();

次に、cal.setTime または cal.setTimeInMillis 関数を使用できます。同様に、get 関数で日付を取得します。

日付を読み取り可能な形式にフォーマットする場合は、日付形式を使用します。

myDate = android.text.format.DateFormat.format("MM/dd/yyyy", cal.getTimeInMillis()).toString();
于 2011-07-12T07:18:36.007 に答える