2013-07-19 24 views
9

Xin chào, tôi hiện đang làm việc với AlarmManager. Tôi đã viết một mã được đưa ra dưới đây. Theo mã, AlarmManager sẽ được kích hoạt sau 10 Sec, nhưng ở đây trong mã của tôi, trình quản lý cảnh báo sẽ kích hoạt ngay lập tức. Hãy giúp tôi.Trình quản lý báo động được kích hoạt ngay lập tức

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

Và AlarmReciever Lớp tô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"); 
    } 
} 

tôi đã thêm quyền yêu cầu trong biểu hiện.

Trả lời

10

Bạn đang sử dụng loại báo thức là ELAPSED_REALTIME_WAKEUP. Điều đó có nghĩa là tham số thứ hai là set() phải là số mili giây kể từ bây giờ, bây giờ được biểu thị là SystemClock.elapsedRealtime().

Nếu mục tiêu của bạn là để có điều này xảy ra 10000 mili giây kể từ thời điểm bạn thực hiện các set() cuộc gọi, mà set() gọi nên là:

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

Cảm ơn bạn rất nhiều nó đã giúp và làm việc :) –

+2

Là một adition, documentarion nói: "Nếu thời gian kích hoạt bạn chỉ định trong quá khứ, báo động sẽ kích hoạt ngay lập tức." Dấu thời gian 10000 bạn cung cấp trong câu hỏi chắc chắn đại diện cho một ngày trong quá khứ. Đây là lý do báo thức của bạn kích hoạt ngay lập tức. Thông tin khác trong https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

Nếu bạn đang tạo PendingIntent của một báo động cho thời gian qua nó sẽ được bắn ngay lập tức. Ví dụ - Lịch trình báo động cho ngày hôm nay 8AM nhưng thực thi mã khoảng 11AM sẽ cháy ngay lập tức.

Giải pháp:

cal.add(Calendar.DATE, 1); 

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

này sẽ cháy sự kiện trên vào ngày hôm sau tại thời gian quy định (nghĩa là 8:00);

+3

"Nếu bạn đang tạo PendingIntent của báo thức trong thời gian qua, nó sẽ được kích hoạt ngay lập tức". Giúp tôi rất nhiều. – androidStud