簡體   English   中英

使用 AlarmManager 和 BroadcastReceiver 調用自己的多個廣播

[英]Multiple broadcasts calling themselves with AlarmManager and BroadcastReceiver

我正在 Android 中構建一個飲水提醒應用程序,我想提醒用戶在白天多次喝水,而無需用戶打開應用程序(以便將意圖發送到廣播接收器)。 這樣做的最佳方法是什么? 這是我的代碼:

警報接收器.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));

提前致謝!

更正您不需要后台服務。 您需要將其放在后台服務中。

根據已發布教程中的信息。 您可能沒有正確連接警報服務。

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));

這應該根據您提供的信息和該教程中的詳細信息完成您需要執行的操作

雅這是正確的方法。 如果您想呼叫調度重復警報,請查看鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM