1

我正在设置多个警报,以便可以在特定日期重复它们。现在我听说 Android 不会在重启时保存警报。我还阅读了BroadcastReceiver应该在何时BOOT_COMPLETED重新安排所有警报时使用。

但是,如果我每天有 5 个警报 = 在不同的日子安排大约 35 个警报,我如何告诉 BroadcastReceiver 在重新启动后重新安排警报。我需要将它们存储在数据库中还是?我该如何存储它们?还是我只需要 BOOT_COMPLETED ?这种事情有什么例子吗?我找不到它。

这是我目前用于设置警报和我的简单接收器类的东西。我在这里使用 Service 而不是 BroadcastReceiver,因为我听说 BR 应该只用于处理短的东西,并且将来我将不得不使用一些长的声音剪辑。

   private void setAlarm(){     
            Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
            PendingIntent pendingintent = PendingIntent.getService(getBaseContext(), 2, intent, PendingIntent.FLAG_CANCEL_CURRENT);

            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + sveskupa, pendingintent);
            Toast.makeText(getBaseContext(), "Alarm is set", Toast.LENGTH_LONG).show();
        }

警报接收器类:

public class AlarmReceiver extends Service{

            @Override
            public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public void onCreate() {
                // TODO Auto-generated method stub
                super.onCreate();
                final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.radio3);
                MPRadio1.start();
                Toast.makeText(getBaseContext(), "OnCreate", Toast.LENGTH_LONG).show();

            }        
4

1 回答 1

1

但是,如果我每天有 5 个警报 = 在不同的日子安排大约 35 个警报,我如何告诉 BroadcastReceiver 在重新启动后重新安排警报。

警报时间表要么是固定的、不变的,并且融入了你的代码,要么不是。

如果它被嵌入到您的代码中,只需使用启动时相同的代码BroadcastReceiver来重新建立警报时间表。

否则,警报时间表来自某个地方,因为由于宇宙射线与手机的 CPU 和内存的相互作用,警报时间表不太可能是自发创建的。您需要确保在重新启动后可以访问相同的信息。

我需要将它们存储在数据库中还是?我该如何存储它们?

那取决于你。

我在这里使用 Service 而不是 BroadcastReceiver,因为我听说 BR 应该只用于处理短的东西,并且将来我将不得不使用一些长的声音剪辑。

不要直接使用Servicea _WAKEUP-style 警报,因为无法保证您Service将获得控制权。要么不使用_WAKEUP-style 警报,要么让警报触发 a BroadcastReceiver,它可以与 a 一起使用WakeLock以确保您Service获得控制权并可以完成其工作。

于 2013-01-23T23:09:59.827 回答