我正在尝试在android中开发一个警报系统,该系统将在应用程序关闭后运行,可以实现多个同时警报(这应该是可重复和可取消的,但我已经阅读了这些函数的文档)。
目前,我只有UI(通过AlarmManager在预定时间触发接收器的意图)和Receiver类(扩展BroadCastReceiver)。虽然警报以某种方式起作用,但是在我再次打开应用程序并且没有提供正确的警报之前,会出现警报在适当的时间没有响起的问题。
我已经读过这样的应用程序中常用的服务,用于在活动关闭时提供应用程序的功能。因此,我感兴趣的是服务在应用程序的上下文中提供什么,以及我的问题是否可以通过服务解决。
我已经搜索了答案,并且读到服务对于运行后台操作(即mp3或闹钟)非常有用。例如,谷歌声明"另一个应用程序组件可以启动服务,它将继续在后台运行即使用户切换到另一个应用程序。 &#34 ;.以下answer表示要同时使用"警报,您必须使用服务类#34;。
因此,我认为服务可能对提供警报功能很有用。但是,有些people似乎将服务表示为一个或与AlarmManager一起使用,我目前正在使用它。大多数其他人似乎使用AlarmManger开始服务或执行这种性质的行动。如果有人能够了解服务提供的内容(我已经阅读了谷歌的解释,但我不清楚我是否需要它),我将非常感激。 从UI发送意图
if (row.get(7) == 1) {
Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
alarmIntent.putExtra("id", (long) row.get(0));
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
long longValue = (long) row.get(0);
int intValue = (int) longValue;
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, intValue, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
if (row.get(8) == 1) {
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, (long) row.get(6), (long) row.get(9), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, (long) row.get(6), pendingIntent);
}
}
AlarmReceiver类
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
long id = intent.getLongExtra("id", 0);
Notification.Builder builder = new Notification.Builder(context)
.setSmallIcon(R.drawable.ic_action_search)
PendingIntent pi = PendingIntent.getActivity(context, (int)id, new Intent(), 0);
NotificationManager nm = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify((int)id, builder.build());
}
}
答案 0 :(得分:0)
尝试使用这样的服务:
public class UpdateService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
return START_STICKY;
}
}
当onStartCommand返回START_STICKY时,如果系统被杀,系统将重新启动服务。 Use this link