2016-11-11 1 views
0

알람 관리자에 문제가 있습니다. 특정 시간에 시작 알람을 설정하려고하는데 시간을 설정 한 후 2 초 후에 알람이 시작됩니다. 다음 설정 알람에 대한 내 코드입니다 : 여기알람 관리자를 시작하는 데 걸리는 시간

//setting alarm by clicking "add alarm" 
     addAlarm.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //initializing alert dialog with time picker 
       final AlertDialog.Builder alert = new AlertDialog.Builder(Events.this); 
       final TimePicker timer = new TimePicker(Events.this); 
       alert.setMessage(R.string.choose_time); 
       alert.setTitle(R.string.set_alarm); 
       alert.setView(timer); 
       alert.setPositiveButton("Apply", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         //getting set time 
         int hour = timer.getHour(); 
         int minute = timer.getMinute(); 
         //getting alarm service 
         AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
         //creating intent for switching to AlarmReceiver.class 
         Intent intent = new Intent(Events.this, AlarmReceiver.class); 
         SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy"); 
         //getting full date with hours and minutes 
         String alarmTime = selectedDate + " " + hour + ":" + minute; 
         //parsing date 
         try { 
          alarmDate = formatter.parse(alarmTime); 
         } catch (ParseException e) { 
          e.printStackTrace(); 
         } 
         //creating pending intent 
         PendingIntent pendingIntent = PendingIntent.getBroadcast(Events.this, 
           8452, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
         //setting alarm 
         alarmManager.set(RTC_WAKEUP,alarmDate.getTime(), pendingIntent); 
         //info about time set 
         Snackbar.make(bottomRL, "Alarm set in " + hour + ":" + minute, 
           Snackbar.LENGTH_LONG).show(); 
        } 
       }); 
       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
        } 
       }); 
       alert.show(); 
      } 
     }); 

그리고 내 수신기의 : PLS,

public class AlarmReceiver extends BroadcastReceiver { 
    public AlarmReceiver() { 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Toast.makeText(context, R.string.alarm_message, Toast.LENGTH_LONG).show(); 
      Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); 
      vibrator.vibrate(2000); 
    } 
} 

아무도 도와 줄 수는 문제를 해결하기 위해?

+0

문자열 selectedDate는 다른 액티비티의 getStringExtra에서 가져 오는 문자열입니다. –

+1

'SimpleDateFormat'의 패턴 문자열이 나와 일치하지 않습니다. 그것과 구문 분석하려고, 그래서 그것은 예외를 던지고있어'alarmDate' 당신이 그것을 초기화 무엇이든 남아 있습니다. 이것은 분명 과거의 날짜/시간이므로 알람이 거의 즉시 발사됩니다. SimpleDateFormat에 대한 문서를보고 패턴을 수정하십시오. http://developer.android.com/reference/java/text/SimpleDateFormat.html –

+1

SimpleDateFormat을 "dd-MM-yyyy HH : mm"으로 변경했습니다. 고마워, Mike M. –

답변

0

API 19 이후로 알람 전달이 정확하지 않기 때문에 here을 참조하십시오. OS는 배터리를 절약하기 위해 알람을 동시에 여러 번 발사하도록 변경합니다. 두 번째로 정확하게 알람을 설정하려면 alarmManager.setExact()

관련 문제