2013-07-19 12 views
9

हाय मैं वर्तमान में अलार्ममेनगर के साथ काम कर रहा हूं। मैंने नीचे दिया गया एक कोड लिखा है। कोड के अनुसार अलार्ममेनगर को 10 सेकेंड के बाद ट्रिगर किया जाना चाहिए, लेकिन यहां मेरे कोड में अलार्म मैनेजर तुरंत ट्रिगर होता है। कृपया मदद करे।अलार्म मैनेजर तुरंत ट्रिगर हुआ

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 कक्षा

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 मिलीसेकंड घटित लाना है:

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

आपको बहुत मदद मिली और काम किया :) –

+2

एक एडिशन के रूप में, वृत्तचित्र कहता है: "यदि आपके द्वारा निर्दिष्ट ट्रिगर समय अतीत में है, तो अलार्म तुरंत ट्रिगर होता है।" निश्चित रूप से प्रश्न में प्रदान किए गए 10000 का टाइमस्टैम्प अतीत में एक तिथि का प्रतिनिधित्व करता है। यही कारण है कि आपका अलार्म तुरंत ट्रिगर कर रहा था। https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

आप पिछले समय के लिए एक अलार्म की PendingIntent बना रहे हैं यह हो जाएगा तुरंत निकाल दिया। उदाहरण - आज 8AM के लिए अलार्म शेड्यूल करें लेकिन 11AM के आस-पास कोड निष्पादित करने से तुरंत आग लग जाएगी।

समाधान:

cal.add(Calendar.DATE, 1); 

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

यह निर्दिष्ट समय (यानी 8:00) पर अगले दिन घटना को सक्रिय कर देगा;

+3

में अधिक जानकारी "यदि आप पिछले समय अलार्म के लंबित इंटेन्टेंट बना रहे हैं तो इसे तुरंत निकाल दिया जाएगा"। मुझे बहुत मदद की। – androidStud

संबंधित मुद्दे