2012-04-18 36 views
5

Tôi đã đặt AlarmManagr với thời gian lặp lại. Đây là phương pháp của tôi mà tôi đang thiết lập nó:AlarmManager không hoạt động ở chế độ ngủ

public void setAlarmManager(Context context, Intent intent) {   
    PendingIntent pendingIntent; 
    pendingIntent = PendingIntent.getService(context, 0, intent, 0);    
    AlarmManager alarmManager = 
     (AlarmManager)context.getSystemService(context.ALARM_SERVICE); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.SECOND, 10); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
           calendar.getTimeInMillis(), 
           40000, pendingIntent);     
} 

Điều này hoạt động tốt trừ khi thiết bị của tôi chuyển sang chế độ nghỉ, báo thức ngừng hoạt động cho đến khi tôi thức giấc thiết bị của mình. Sau khi đánh thức thiết bị, AlarmManager bắt đầu hoạt động trở lại.

Làm cách nào để người quản lý chạy ngay cả ở chế độ ngủ?

+0

AlarmManager.set (AlarmManager.RTC_WAKEUP, ...) chỉ hoạt động tốt đối với tôi, đã không cố gắng AlarmManager.setRepeating(). có lẽ điều này có liên quan? không biết, chỉ cần nghĩ rằng tôi muốn đề cập đến – SteelBytes

+0

setRepeating chỉ cần lặp lại nhiệm vụ sau một khoảng thời gian nhất định. phần còn lại của mọi thứ đều giống nhau – Reyjohn

+0

Có ai cho tôi một giải pháp không? – Reyjohn

Trả lời

6

Đó là vì PendingIntent của bạn đang gọi đến một dịch vụ chứ không phải là BroadcastReceiver có nghĩa là thiết bị có thể quay lại chế độ ngủ trước khi dịch vụ của bạn được tạo. Nếu bạn di chuyển đến một máy thu phát sóng thì "nên" ở lại tỉnh táo cho đến khi onReceive hoàn thành BroadcastReceiver, điều đó có nghĩa là bạn sẽ có thời gian để lấy một wakelock và bắt đầu dịch vụ của bạn. Ngay cả khi bạn di chuyển đến một số BroadcastReceiver, bạn sẽ muốn mua một chiếc wakelock cho đến khi bạn hoàn thành quá trình xử lý nếu quá trình này mất hơn 10 giây (đó là giới hạn của một số BroadcastReceiver).

này được lấy từ đoạn 2 của tài liệu android của AlarmManager:

" ... Nếu người nhận báo thức của bạn được gọi là Context.startService(), có thể là điện thoại sẽ ngủ trước khi dịch vụ đã yêu cầu được đưa ra để ngăn chặn điều này. , BroadcastReceiver và Dịch vụ của bạn sẽ cần triển khai chính sách khóa thức thức riêng để đảm bảo rằng điện thoại tiếp tục chạy cho đến khi dịch vụ khả dụng. "

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