2016-12-01 5 views
0

Я работаю 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 

Что здесь не так? Как предотвратить это повторение?

спасибо.

ответ

0

Я не думаю, что Ваш радиовещательный приемник перезагрузится ...

Мы можем зарегистрировать наши приемники двух способов 1. Статические по Manifest файла 2. Динамически по registerReceiver (приемник);

U может использовать обе вещи, так что это происходит. Я новичок. Я хочу помочь тебе. Извините, если я ошибаюсь. Надеюсь, это поможет.

Смежные вопросы