0

ユーザーから複数の「n」回の入力を受け取り、それらの特定の時間に鳴るアラームアプリケーションを作成しようとしています。そのために、時間と分のエントリの両方に EditText の配列を作成しました。開始ボタンの onclick リスナーで、入力されたすべての時間入力のアラーム マネージャーを初期化したいと考えています。

カレンダーの配列を作成した後、カレンダー オブジェクトごとに 1 つずつ、インテントと保留中のインテント、およびアラーム マネージャー オブジェクトの配列も作成する必要がありますか?

これは私のスタートボタンのコードです:

public void setAlert(View view) {

    int length = editHour.length;
    int h[] = new int[length];
    int m[] = new int[length];
    Calendar[] cal = new Calendar[length];
    for (int i = 0; i < length; i++) {
        cal[i] = Calendar.getInstance();
    }
    for (int i = 0; i < length; i++) {
        try {

            m[i] = Integer.parseInt(editHour[i].getText().toString());

            h[i] = Integer.parseInt(editMinute[i].getText().toString());

            cal[i].set(Calendar.HOUR, h[i]);
            cal[i].set(Calendar.MINUTE, m[i]);

            Intent intent = new Intent(this, AlarmService.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(this,
                    12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP,
                    cal[i].getTimeInMillis(), pendingIntent);
            Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.print("OOPS!");

        }
    }
}
4

2 に答える 2

1

リクエスト コードは一意であり、これが問題です。異なるアラームには固有のコードを使用する必要があります。1 つのリクエスト コードでコードをオーバーライドすると、アラーム時刻が上書きされます。(私の悪い英語でごめんなさい、それは私の言語ではありません!)

このコードを使用してください:

for (int i = 0; i < length; i++) {
    .
    .
    .

    int requestCode = (int) (System.currentTimeMillis());
    PendingIntent pendingIntent = PendingIntent.getActivity(this,
                requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    Thread.sleep(10);

    .
    .
    .
}
于 2015-01-09T16:14:27.900 に答える
0

5 つの異なるアラームが必要な場合は、PendingIntent が異なる必要があります。エクストラを入れることで、PendingIntent を一意にすることができます。とにかく、コードは少なくとも 1 つのアラームを生成する必要があります。カレンダーで設定している時間が正しいことを確認します。

とにかく、5 つの個別のカレンダー、インテントなどは必要ありません。それらを更新してアラームを設定するだけです。それらを配列に保存する必要はありません。

于 2012-07-06T14:54:12.140 に答える