2013-07-19 6 views
9

안녕하세요 저는 현재 AlarmManager로 작업하고 있습니다. 나는 아래 주어진 코드를 작성했다. 코드 당 10 초 후에 AlarmManager가 트리거되어야하지만, 여기서는 알람 관리자가 즉시 트리거합니다. 도와주세요.알람 관리자가 즉시 트리거 됨

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
     long timeOrLengthofWait = 10000; 
     Intent intentToFire = new Intent(this, AlarmReciever.class); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); 
     alarmManager.set(alarmType, timeOrLengthofWait, alarmIntent); 
    } 
} 

그리고 내 AlarmReciever 클래스 I 이미 매니페스트에 필요한 권한을 추가 한

public class AlarmReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String phoneNumberReciever="5556"; 
     String message="Alarm Triggered"; 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumberReciever, null, message, null, null); 
     Toast.makeText(context," A message has been sent", Toast.LENGTH_LONG).show(); 

     Log.d("Alarm ", "Alarm Has been triggered and sms send"); 
    } 
} 

.

답변

10

알람 유형이 ELAPSED_REALTIME_WAKEUP입니다. 즉, set()에 대한 두 번째 매개 변수는 지금부터 밀리 초가되어야하며 여기서는 SystemClock.elapsedRealtime()으로 표시됩니다.

당신의 목표는 set() 호출해야한다는이 당신이 set() 전화를 걸 때부터 10000 밀리 초를 발생하는 것입니다 경우 당신이 과거의 시간 알람의 PendingIntent를 작성하는 경우

alarmManager.set(alarmType, SystemClock.elapsedRealtime()+timeOrLengthofWait, alarmIntent); 
+0

감사합니다. 덕분에 도움이되고 도움이되었습니다. –

+2

약식으로 문서화에 다음과 같이 명시되어 있습니다. "지정한 트리거 시간이 과거이면 경보가 즉시 트리거됩니다." 질문에 제공된 10000의 타임 스탬프는 과거의 날짜를 나타냅니다. 이것이 바로 당신의 경보가 바로 발동 한 이유입니다. https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

이 될 것입니다 즉시 해고됐다. 예 - 오늘 오전 8시에 알람을 예약하되 오전 11 시경에 코드를 실행하면 즉시 실행됩니다.

솔루션 :이 지정된 시간 (즉 오전 8시)에서 다음 날에 이벤트가 발생합니다

cal.add(Calendar.DATE, 1); 

long delay = 24 * 60 * 60 * 1000; 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);` 

;

+3

에서 "과거 시간 동안 알람의 PendingIntent를 만드는 경우 즉시 실행됩니다." 많이 도와 줬어. – androidStud

관련 문제