2013-07-19 24 views
9

Merhaba Şu an AlarmManager ile çalışıyorum. Aşağıda verilen bir kod yazdım. Kod başına göre AlarmManager 10 sn sonra tetiklenmelidir, ama burada kodumda alarm yöneticisi hemen tetikler. Lütfen yardım et.Alarm yöneticisi hemen tetiklendi

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); 
    } 
} 

Ve My AlarmReciever Sınıf I Zaten tezahür gerekli izinleri eklemiş

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"); 
    } 
} 

.

cevap

10

ELAPSED_REALTIME_WAKEUP alarm türünü kullanıyorsunuz. Bu, set() için ikinci parametrenin, şimdi SystemClock.elapsedRealtime() olarak ifade edildiği şu andaki milisaniye sayısı olması gerektiği anlamına gelir.

hedefiniz set() çağrı olması gerektiğini, bu set() arama yapmak andan itibaren 10000 milisaniye meydana sahip ise: Eğer son kez alarm PendingIntent oluşturuyorsanız

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

Yardım ettiğinden ve çalıştığınızdan çok teşekkür ederim :) –

+2

Belgeleme şöyle diyor: "Belirttiğiniz tetikleme süresi geçmişse, alarm hemen tetiklenir." Soruya verdiğiniz 10000 zaman damgası, geçmişte bir tarihi temsil eder. Alarmınızın hemen tetiklenmesinin nedeni budur. Daha fazla bilgi için https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

öyle olacak hemen ateş etti. Örnek - Bugün 8AM için zamanlama alarmı ancak 11AM civarında kod çalıştırmak hemen tetiklenecektir.

Çözüm: Bu belirtilen süre (yani 08:00) ertesi günü olay ateş edeceği

cal.add(Calendar.DATE, 1); 

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

;

+3

"Eğer geçmişte bir alarmın beklemesini yaparsanız hemen tetiklenir". Bana çok yardım etti. – androidStud

İlgili konular