报警应用程序(Android)中的服务功能

时间:2015-07-04 23:59:08

标签: android service alarmmanager

我正在尝试在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());
}

}

1 个答案:

答案 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