0

TimeInterval オブジェクトに保存されている毎週のスケジュールがあり、正常に動作します。それぞれにアラームを設定できるように、ループを作成しました。コードが機能しません。何が欠けていますか?

さらに、別のスレッドの BroadcastReceiver からこれらのアラームをキャンセルするにはどうすればよいですか?

for(ArrayList<TimeInterval> day : days){
        for(TimeInterval ti : day){
            numberofintents++;
            Intent i = new Intent(getApplicationContext(),ChangeMode.class);
            i.putExtra("ringermode", ti.getRingerMode());

            PendingIntent pending = PendingIntent.getService(getApplicationContext(), id, i,PendingIntent.FLAG_CANCEL_CURRENT);
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.MINUTE,ti.getMinute()%60);
            cal.set(Calendar.HOUR_OF_DAY,ti.getMinute()/60);
            cal.set(Calendar.DAY_OF_WEEK,dayofweek);
            Log.d(TAG, cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE));
            service.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*60*60*24*7, pending);
            id++;
        }
        dayofweek++;
    }
4

1 に答える 1

0

最初に保留中のインテントの配列リストを作成し、

public static ArrayList <PendingIntent> intentArray= new ArrayList <PendingIntent>();

次に、保留中のインテントを配列リストに追加し、

for(ArrayList<TimeInterval> day : days){
    for(TimeInterval ti : day){
        numberofintents++;
        Intent i = new Intent(getApplicationContext(),ChangeMode.class);
        i.putExtra("ringermode", ti.getRingerMode());

        PendingIntent pending = PendingIntent.getService(getApplicationContext(), id, i,PendingIntent.FLAG_CANCEL_CURRENT);

        intentarray.add(pending);

        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.MINUTE,ti.getMinute()%60);
        cal.set(Calendar.HOUR_OF_DAY,ti.getMinute()/60);
        cal.set(Calendar.DAY_OF_WEEK,dayofweek);


    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            pendingIntent);


         id++;
    }
    dayofweek++;
}

これで保留中のインテントが配列リストに保存されました。

アラームを解除したい場合は、

alarmManager.cancel(intentArray.get(i));
于 2013-03-04T09:33:14.797 に答える