2012-03-29 36 views
9

Tôi phải làm một ứng dụng mà tôi phải đặt ngày và vào ngày cụ thể đó lúc 9 giờ, tôi phải thực hiện một thông báo. Phương pháp đơn giản nhất để thực hiện điều đó là gì? (Tôi muốn ứng dụng hoạt động ngay cả khi tôi khởi động lại điện thoại của mình hoặc tháo pin ra.) AlarmManager có phải là giải pháp không?thông báo trên Android tại ngày cụ thể

+12

bạn có thể mong đợi Android hoạt động như thế nào nếu không có pin? :) – waqaslam

+0

tôi có nghĩa là tôi vẫn có thể nhận được thông báo đó mà không cần truy cập lại ứng dụng – user1253236

+0

OP rõ ràng có nghĩa là nếu anh ta/cô ấy lấy pin ra và thay thế nó. –

Trả lời

15

Để lập kế hoạch hành động bạn có thể sử dụng AlarmManager

Hãy thử mã này nó làm việc cho tôi:

1/Khai báo các CLASS BroadcastReceiver để khởi động hành động, lớp này có thể được bên hoạt động của bạn hoặc bên ngoài trong một tập tin java khác

public class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Toast.makeText(context, intent.getStringExtra("param"),Toast.LENGTH_SHORT).show(); 
    } 

} 

2/Bên trong Phương pháp onCreate của bạn đặt mã này

AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 

    Receiver receiver = new Receiver(); 
    IntentFilter filter = new IntentFilter("ALARM_ACTION"); 
    registerReceiver(receiver, filter); 

    Intent intent = new Intent("ALARM_ACTION"); 
    intent.putExtra("param", "My scheduled action"); 
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0); 
    // I choose 3s after the launch of my application 
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000, operation) ; 

Khởi chạy ứng dụng của bạn một Bánh mì nướng sẽ xuất hiện sau 3 giây, Vì vậy, bạn có thể thay đổi "System.currentTimeMillis() + 3000" với thời gian đánh thức của bạn.

+0

Hoạt động hoàn hảo. Điều này nên được chấp nhận làm câu trả lời. – user1531978

3

Bạn nên tạo ứng dụng dưới dạng android service.

Dịch vụ là thành phần ứng dụng có thể hoạt động trong thời gian dài hoạt động ở chế độ nền và không cung cấp giao diện người dùng. Một thành phần ứng dụng khác có thể bắt đầu một dịch vụ và nó sẽ tiếp tục để chạy ở chế độ nền ngay cả khi người dùng chuyển sang ứng dụng khác. Ngoài ra, một thành phần có thể liên kết với một dịch vụ để tương tác với nó và thậm chí thực hiện truyền thông interprocess (IPC). Ví dụ: dịch vụ có thể xử lý các giao dịch mạng, phát nhạc, thực hiện tệp I/O hoặc tương tác với nhà cung cấp nội dung, tất cả đều từ nền .

1

Trình quản lý báo thức là giải pháp tôi đoán. bạn nên đặt trình quản lý báo thức vào một thời điểm cụ thể và sau đó đặt nó làm thông báo trong quá trình khởi động. và điều này nên được thực hiện trong một dịch vụ. tôi hy vọng nó đã giúp.

+0

không, nó đã không, nhưng nhờ anyway – user1253236

4

Bạn phải sử dụng số AlarmManager để đặt báo thức loại RTC_WAKEUP.

Từ docs:

Khi cảnh báo tắt, tiếp cận mục đích đã được đăng ký cho nó là phát sóng bởi hệ thống, tự động khởi động ứng dụng đích nếu nó chưa được chạy. báo động đăng ký được giữ lại trong khi điện thoại đang ngủ (và có thể tùy chọn đánh thức thiết bị lên nếu họ đi tắt trong thời gian đó), nhưng sẽ bị xóa nếu nó bị tắt và khởi động lại .

Vì vậy, điều này có nghĩa rằng:

  • Bạn không cần một dịch vụ liên tục chạy để đạt được điều này.
  • Có thể cần BroadcastListener để nghe sự kiện BOOT_COMPLETE để đăng ký lại báo thức sau khi khởi động lại thiết bị.
Các vấn đề liên quan