多个广播用AlarmManager和BroadcastReceiver调用自己

时间:2016-04-06 12:01:15

标签: java android alarmmanager android-broadcastreceiver

我正在Android中构建水提醒应用程序,我想提醒用户在白天喝水倍数,而无需用户打开应用程序(这样就会发送广播接收器的意图)。最好的方法是什么?这是我的代码:

AlertReceiver.java

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;

public class AlertReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        createNotification(context, "DRINK", "Time to hydrate", "Alert");
    }

    public void createNotification(Context context, String msg, String msgText, String msgAlert) {

        PendingIntent notificationIntent = PendingIntent.getActivity(context, 0,
                new Intent(context, MainActivity.class), 0);

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_announcement)
                .setContentTitle(msg)
                .setContentText(msgText)
                .setTicker(msgAlert);

        notificationBuilder.setContentIntent(notificationIntent);

        notificationBuilder.setDefaults(Notification.DEFAULT_ALL);

        notificationBuilder.setAutoCancel(true);

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(1, notificationBuilder.build());

    }

}

MainActivity.java的一部分

Long alertTime = nextAlarm.getTimeInMillis();
        Intent alertIntent = new Intent(this, AlertReceiver.class);

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

        alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime,
                PendingIntent.getBroadcast(this, 1, alertIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT));

提前致谢!

2 个答案:

答案 0 :(得分:1)

更正您不需要背景服务。 你需要把它放在后台服务中。

根据发布教程中的信息。您可能没有将您的警报服务连接起来。

https://guides.codepath.com/android/Starting-Background-Services#using-with-alarmmanager-for-periodic-tasks

活动

Long alertTime = nextAlarm.getTimeInMillis();
    Intent alertIntent = new Intent(this, AlertReceiver.class);

//ADD THIS
final PendingIntent pIntent = PendingIntent.getBroadcast(this, MyAlarmReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);

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

 alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, AlarmManager.INTERVAL_HALF_HOUR, pIntent);

    // REMOVE THIS: 
   alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime,
            PendingIntent.getBroadcast(this, 1, alertIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT));

这应该根据您提供的信息和该教程中的详细信息完成您需要做的事情

答案 1 :(得分:0)

雅这是正确的方法。如果您需要呼叫预约重复预警,请检查this链接。