2016-03-17 15 views
7

Tôi nhận được thông báo lúc 10:30 tối. Nhưng khi thiết bị của tôi tắt lúc 10:30 PM và sau đó sau khi tôi bật thiết bị của mình lúc 11:00 PM, tôi không nhận được thông báo đang chờ xử lý. Vì vậy, tôi không hiểu whats vấn đề là. bất kỳ trợ giúp sẽ đánh giá cao.Không thể đặt báo thức lặp lại khi khởi động

Đây là mã của tôi trong hoạt động khi tạo.

Intent alarmIntent = new Intent(CH_Dashboard.this, TimeAlarmEvening.class); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(CH_Dashboard.this, 0, alarmIntent, 0); 

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    Calendar firingCal = Calendar.getInstance(); 
    Calendar currentCal = Calendar.getInstance(); 

    firingCal.set(Calendar.HOUR, 10); 
    firingCal.set(Calendar.MINUTE, 30); 
    firingCal.set(Calendar.SECOND, 0); 
    firingCal.set(Calendar.AM_PM,Calendar.PM); 

    long intendedTime = firingCal.getTimeInMillis(); 
    long currentTime = currentCal.getTimeInMillis(); 

    if(intendedTime >= currentTime) 
    { 
     manager.setRepeating(AlarmManager.RTC, 
       intendedTime, AlarmManager.INTERVAL_DAY, 
       pendingIntent); 
    } 
    else 
    { 
     firingCal.add(Calendar.DAY_OF_MONTH, 1); 
     intendedTime = firingCal.getTimeInMillis(); 

     manager.setRepeating(AlarmManager.RTC, 
       intendedTime, AlarmManager.INTERVAL_DAY, 
       pendingIntent); 
    } 

Mã nhận của tôi ở đây và nhận thông báo thành công khi thiết bị BẬT.

 Intent notificationIntent = new Intent(context, CH_Dashboard.class); 
     notificationIntent.putExtra("fromNotification","notify"); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
     stackBuilder.addParentStack(CH_Dashboard.class); 
     stackBuilder.addNextIntent(notificationIntent); 

     PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 

     builder.setAutoCancel(true); 

     Notification notification = builder.setContentTitle("Demo App Notification") 
       .setContentText("New Notification From Demo App..") 
       .setTicker("New Message Alert!") 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentIntent(pendingIntent).build(); 

     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, notification); 

đây là mã nhận khởi động của tôi.

if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) 
    { 
    Intent alarmIntent = new Intent(context, TimeAlarmEvening.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0); 

    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    Calendar firingCal = Calendar.getInstance(); 
    Calendar currentCal = Calendar.getInstance(); 

    firingCal.set(Calendar.HOUR, 10); 
    firingCal.set(Calendar.MINUTE, 30); 
    firingCal.set(Calendar.SECOND, 0); 
    firingCal.set(Calendar.AM_PM,Calendar.PM); 

    long intendedTime = firingCal.getTimeInMillis(); 
    long currentTime = currentCal.getTimeInMillis(); 

    if(intendedTime >= currentTime) 
    { 
     manager.setInexactRepeating(AlarmManager.RTC, 
       intendedTime, AlarmManager.INTERVAL_DAY, 
       pendingIntent); 
    } 
    else 
    { 
     firingCal.add(Calendar.DAY_OF_MONTH, 1); 
     intendedTime = firingCal.getTimeInMillis(); 

     manager.setInexactRepeating(AlarmManager.RTC, 
       intendedTime, AlarmManager.INTERVAL_DAY, 
       pendingIntent); 
    } 

    } 

Và cuối cùng trong bản kê khai tôi đã khai báo.

 <receiver 
     android:name=".model.AutoStart" 
     android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

    <receiver android:name=".TimeAlarmEvening"> 
     <intent-filter> 
      <action android:name="android.media.action.DISPLAY_NOTIFICATION_EVENING" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

Trả lời

4

Tôi đã giải quyết vào ngày đó nhưng quên trả lời ở đây. Tôi đã thực hiện một số thay đổi trong tệp kê khai. Chỉ cần xóa mặc định danh mục dòng trong cả bộ lọc ý định và hoạt động.

<receiver 
    android:name=".model.AutoStart" 
    android:enabled="true" 
    android:exported="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

<receiver android:name=".TimeAlarmEvening"> 
    <intent-filter> 
     <action android:name="android.media.action.DISPLAY_NOTIFICATION_EVENING" /> 
    </intent-filter> 
</receiver> 
0

Tôi không viết toàn bộ mã cho bạn. Nhưng tôi có thể chỉ cho bạn nơi bạn có thể áp dụng logic của mình.

-> Trước tiên, hãy tìm cách theo dõi chính mình, những gì bị bỏ qua, chẳng hạn như bằng cách theo dõi trạng thái sự kiện trong cơ sở dữ liệu.

-> Sau đó, thiết lập BOOT_COMPLETEDBroadcastReceiver để tìm khi khởi động lại điện thoại. Trong đó, lập lịch bất kỳ (các) báo động nào vẫn còn trong tương lai và quyết định phải làm gì về các báo động đã xảy ra trong quá khứ nhưng đã bị bỏ qua (ví dụ: nâng một Thông báo chỉ ra các sự kiện bị nhỡ).

- Một cách để làm điều này sẽ được lắng nghe cho sự kiện điện thoại tắt máy:

<action android:name="android.intent.action.ACTION_SHUTDOWN" /> 

và trước khi thiết bị tắt, tiết kiệm thời gian tắt máy.

Sau đó nghe cho khởi động thiết bị:

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

và viết logic của riêng bạn mà xác định báo động sẽ bị sa thải trong thời gian chết đó, và bắn những báo động ngay lập tức với AlarmManager.

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