【问题标题】:Android: why did the Alarm notification stop after system rebootAndroid:为什么系统重启后警报通知停止
【发布时间】:2023-03-31 20:15:02
【问题描述】:

我正在开发一个每天应该发出五次警报的 Android 应用程序:
- 每天的时间不是恒定的
- 闹钟响后,我会安排下一个闹钟。

我的问题是:警报通知工作 1 天然后停止,并且当设备重新启动两次时通知不起作用,如果有其他方法可以做到这一点,我现在不知道,任何帮助都会非常感激!

代码: 我有这个功能来调用广播接收器

public static void Start_Notifying(Context context){             
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(System.currentTimeMillis());
    cal.add(Calendar.HOUR_OF_DAY,hour);
    cal.add(Calendar.MINUTE, min);      
    Intent intent = new Intent(context,  OnetimeAlarmReceiver.class);
    intent.setAction("START_NOTIFYING");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, notify.REQUEST_CODE, intent,0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() , pendingIntent); 
    SaveAlarmManager(alarmManager, pendingIntent);

}

oneTimeAlarmReciever 的代码

public void onReceive(Context context, Intent intent) {     
    main_menu.con = context;                
    Notification notifyDetails;
    NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    notifyDetails = new Notification(R.drawable.icon,s1,System.currentTimeMillis());
    PendingIntent pendingIntent = PendingIntent.getActivity(context, REQUEST_CODE, new Intent(context, prayertimes.class), 0);
    notifyDetails.setLatestEventInfo(context,s2+ notify.prayName , s3, pendingIntent);
    notifyDetails.sound=Uri.parse(PlaySound());
    nm.notify(NOTIFICATION_ID, notifyDetails);                          
    main_menu.notify_me();
}

notify_me()的代码

static void notify_me() {               
    hour =pTime.num1;
    min =pTime.num2;                
    Start_Notifying(con);
}

在清单文件中

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

<receiver class =".OnetimeAlarmReceiver" android:name="OnetimeAlarmReceiver">
    <intent-filter>
        <action android:name="START_NOTIFYING" />
        <action android:name="android.intent.action.BOOT_COMPLETED"> </action>
        <data android:mimeType="audio/ogg" />
    </intent-filter>
</receiver>

【问题讨论】:

    标签: android android-manifest broadcastreceiver alarmmanager android-alarms


    【解决方案1】:

    为什么系统重启后警报通知停止了

    因为警报计划在重新启动时被清除。如果您希望在重新启动后再次启动警报,您将需要实现一个响应 RECEIVE_BOOT_COMPLETED 广播的 BroadcastReceivermy WakefulIntentService repo 中的 demo/ 项目演示了这一点。

    【讨论】:

    • 非常感谢,有没有办法像每 2 小时更新一次广播接收器,以确保即使系统没有重新启动,警报也会一直有效;在某些设备中,警报在 2 天后停止工作(并且设备在这段时间内从未重新启动)不知道为什么会发生这种情况!
    • 我建议注册第二个计划任务以重新注册其他任务。第二个计划任务将每 40 小时重复运行一次。
    猜你喜欢
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多