2013-07-18 57 views
5

Chương trình của tôi được thiết kế để tạo ra một báo thức lặp lại, kích hoạt phát sóng phát lại lần lượt thông báo. Báo thức được lặp lại bằng khoảng thời gian do người dùng nhập.AlarmManager setRepeating()

Ví dụ: nếu tôi muốn đặt báo thức chạy 10 giây một lần, tôi sẽ làm như thế nào?

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent); 

Điều này có đúng không? và máy thu phát sóng của tôi không được gọi vì lý do nào đó.

public static void createAlarms(Context mcontext) { 
    cal = Calendar.getInstance(); 
    cal.add(Calendar.HOUR, alarmintervalint); 
    calintent = new Intent(mcontext, AlarmBroadcastReceiver.class); 
    calpendingintent = PendingIntent.getBroadcast(mcontext.getApplicationContext(), 12345, calintent, 0); 
    am = (AlarmManager)mcontext.getSystemService(Activity.ALARM_SERVICE); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, calpendingintent); 
} 

lớp broadcastreceiver của tôi không được gọi và Im không chắc chắn "setRepeating()" phương pháp im sử dụng được thiết lập đúng ..

Xin giúp!

+0

Nếu bạn vẫn gặp sự cố, tôi khuyên bạn nên làm theo hướng dẫn này, nó thực sự hữu ích: http://code4reference.com/2012/07/tutorial-on-android-alarmmanager/. Nó giúp tôi xử lý rất nhiều với AlarmManager. –

+0

cảm ơn tôi sẽ xem xét nó! –

Trả lời

-1

hãy sử dụng tính năng này. Hy vọng nó sẽ giải quyết vấn đề của bạn

am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, pi);

+0

Sự khác biệt giữa Không chính xác và bình thường là gì? Và tôi không muốn đặt khoảng thời gian trong một ngày. Nó là biến người dùng nhập vào (số nguyên) –

5

sử dụng mã này

AlarmManager alarmMgr; 
    PendingIntent pendingIntent; 

    public void startAlarmManager() 
     { 
      Intent dialogIntent = new Intent(getBaseContext(), AlarmBroadcastReceiver.class); 

        alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
        pendingIntent = PendingIntent.getBroadcast(this, 0, dialogIntent,PendingIntent.FLAG_CANCEL_CURRENT); 

        alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), 10000, pendingIntent); 

       } 
     } 

Thời tiết bạn muốn dừng báo động

public void stopAlarmManager() 
{   
    if(alarmMgr != null) 
     alarmMgr.cancel(pendingIntent); 
} 

được nhớ không quên đăng ký nhận trong file manifest

<receiver android:name=".AlarmBroadcastReceiver" > 
     </receiver> 
+0

điều này thật tuyệt! cảm ơn. nhưng báo thức của tôi sẽ kích hoạt thông báo vì vậy tôi có cần thực hiện thay đổi không? –

+0

không cần phải thay đổi trong thông báo –

+0

làm cách nào tôi có thể đặt lại báo thức này? như giả sử sau 50 báo động, tôi muốn đặt lại khoảng thời gian. tôi có thể gọi phương thức này không? bởi vì khi tôi thử nó ngay bây giờ, nó cho tôi một vòng lặp không bao giờ kết thúc giữa phương thức này và lớp broadcastreceiver. –

-1
Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 30); 

    long time = cal.getTimeInMillis(); 

    Intent i = new Intent(G.context, BootCompleteReceiver.class); 

    PendingIntent pi = PendingIntent.getBroadcast(G.context, 0, i, 0); 

    G.alarmManager.set(AlarmManager.RTC_WAKEUP, time, pi); 
+0

Trong câu hỏi được hỏi, ông sẵn sàng đặt báo thức lặp lại, giải pháp của bạn sẽ chỉ kích hoạt báo thức một lần. –

+0

bạn thân mến, tôi sẽ kiểm tra lại mã này và chỉnh sửa nó. –

+0

Cảm ơn, điều đó sẽ tốt hơn khi một người mới học sẽ không bị lẫn lộn bởi điều này. –

Các vấn đề liên quan