2

私のアプリには、ユーザーが予定を設定できるようにする機能があります。これには、予定の設定された指定日に保留中のインテントによってトリガーされるアラームも含まれます。設定した日付になると、今日が予定であることを示すトースト メッセージが表示されます。

ユーザーは予定を編集することもできます。これには、(トグル ボタンを使用して) アラームのオンとオフを切り替えることができることが含まれます。アラームをオフにした場合、保留中のインテントをキャンセルできるようにしたいと考えています。これは明らかに、一意の ID に依存する必要があることを意味します。

これが私の主な質問です:

IDを設定する最良の方法は何ですか? 設定できる実際の「一意の」値はありません。ID に「現在の時刻」を設定し、これを EXTRA として追加する人を見たことがありますが、まったく同じ時刻の保留中のインテント アラームが 2 つある場合はどうなりますか?

新しい予定を作成すると、ID が自動的にインクリメントされ、文字通り、このユーザーに「バインド」されていない保留中のインテント アラームが設定されます。

これが私の現在の保留中のインテントコードです:

AlarmManager dateSet = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, DateAlarm.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    dateSet.set(AlarmManager.RTC_WAKEUP, setDate.getTime(), pendingIntent); 

警報クラス:

package com.example.flybase2;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.Toast;

public class DateAlarm extends Activity {

Context context;
@SuppressWarnings("static-access")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;
    Toast newToast = new Toast(getApplicationContext());
    newToast.setGravity(Gravity.FILL, 0, 0);
     newToast.makeText(context, "Appointment is today", Toast.LENGTH_LONG).show();
}

}

4

1 に答える 1

3

乱数を生成し、それを一意の ID として使用します。その番号を SharePreferences または sqlite データベースに保存します。これにより、デバイスの再起動間でアラームを保持する機能もシードされます.

または、 System.currentTimeMillis() は本当に必要なものを提供するはずです。まったく同じミリ秒の 2 つの ID を取得することは非常にまれです。

于 2013-02-09T12:58:12.240 に答える