私はalarmManagerを使用しています。また、API 19以降、setExact()メソッドを使用して設定されたアラーム以外のすべてのアラームは正確ではありません。ですから、複数の正確なアラームを設定する場合は、setExact()メソッドを何度も使用しています。私はそれを設定する方が良いと決めた後、放送受信機を別のものに設定する。問題は、すべてのBroadcastReceiverがトリガーされ、新しいアラームがBroadcastReceiver自体が再起動するように設定されていることです。BroadcastReceiverは呼び出された後に自身を再起動します
マイコード:
Calendar calendar = Calendar.getInstance();
Date previoudTime = calendar.getTime();
calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek-1);
calendar.set(Calendar.HOUR, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
DateFormat dateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
String sDate = dateFormat.format(calendar.getTime());
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent1 = new Intent(MyService_alarm.this, MyReceiver_Alarm.class);
Log.e("Point_1", "Compare1 " + calendar.getTime());
Log.e("Point_1", "Compare2 " + previoudTime);
Log.e("Point_1", "Compare " + calendar.getTime().compareTo(previoudTime));
if(calendar.getTime().compareTo(previoudTime) < 0) {
int a = calendar.get(Calendar.WEEK_OF_MONTH);
calendar.set(Calendar.WEEK_OF_MONTH,a + 1);
//Log.e("Point_1", "Less " + calendar.getTime());
}
Long alarmTime = calendar.getTimeInMillis();
intent1.putExtra("Size_ABC", y);
intent1.putExtra("Date",sDate);
intent1.putExtra("Position",position);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService_alarm.this, position, intent1, 0);
//Also change the time to 24 hours.
alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
BroadcastReceiverコード:
public class MyReceiver_Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final MediaPlayer mediaPlayer = MediaPlayer.create(context, RingtoneManager.getActualDefaultRingtoneUri(context,RingtoneManager.TYPE_ALARM));
SQLiteDataBase sqLiteDataBase = new SQLiteDataBase(context);
final AudioManager audio = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audio.setStreamVolume(AudioManager.STREAM_MUSIC,sqLiteDataBase.getVolume(intent.getIntExtra("Size_ABC",1)),0);
final int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
//Log.e("Point_1", "Current Volume " + currentVolume);
//mediaPlayer.setVolume(0.50f,1.0f);
mediaPlayer.start();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mediaPlayer.stop();
//Log.e("Point_1", "Volume_after " + audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
}
}, 5000);
Log.e("Point_1", "Alarm!!! " + sqLiteDataBase.getVolume(intent.getIntExtra("Size_ABC",1)));
ParsePosition parsePosition = new ParsePosition(0);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
Calendar calendar1 = Calendar.getInstance();
Log.e("Point_1","Intent_Extra " + intent.getStringExtra("Date"));
calendar1.setTime(simpleDateFormat.parse(intent.getStringExtra("Date"), parsePosition));
int i = calendar1.get(Calendar.MINUTE);
calendar1.set(Calendar.MINUTE, i + 3);
long alarmTime = calendar1.getTimeInMillis();
DateFormat dateFormat = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
String sDate = dateFormat.format(calendar1.getTime());
Intent intent1 = new Intent(context,MyReceiver_Alarm.class);
intent1.putExtra("Date", sDate);
intent1.putExtra("Position",intent.getIntExtra("Position",1));
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,intent.getIntExtra("Position",1),intent1,0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent);
Log.e("Point_1","SDateP " + calendar1.getTime());
}
}
Logcat(つまり、繰り返しの一部でしかありません):
Intent_Extra Thu Dec 01 03:15:00 GMT+05:00 2016
12-01 15:15:01.202 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ SDateP Thu Dec 01 03:18:00 GMT+05:00 2016
12-01 15:15:01.252 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.262 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.272 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.282 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.282 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Alarm!!! 0
12-01 15:15:01.282 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Intent_Extra Thu Dec 01 03:15:00 GMT+05:00 2016
12-01 15:15:01.282 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ SDateP Thu Dec 01 03:18:00 GMT+05:00 2016
12-01 15:15:01.482 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.482 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.512 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.512 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.512 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Alarm!!! 0
12-01 15:15:01.512 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Intent_Extra Thu Dec 01 03:15:00 GMT+05:00 2016
12-01 15:15:01.512 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ SDateP Thu Dec 01 03:18:00 GMT+05:00 2016
12-01 15:15:01.572 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.582 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.602 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ id 21
12-01 15:15:01.602 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Volume 0
12-01 15:15:01.602 20321-20321/com.SetAndGet.amadey.myapplication5 E/Point_1﹕ Alarm!!! 0
ここで間違っていますか?この繰り返しを防ぐにはどうすればいいですか?
ありがとうございます。