BroadcastReceiver无法正常工作,而在其他情况下则无法正常工作

时间:2017-07-23 17:53:56

标签: java android broadcastreceiver alarmmanager

我正在创建一个应用程序,需要在特定日期临近时通知用户通知。

我使用Client课程作为“中间人”。活动与Service之间。绑定服务后,我调用一个与AlarmTask类交互的方法,该类使用AlarmManager来设置警报。作为最后一步,我发送一个PendingIntent来启动我的另一个类女巫是一个BroadcastReceiver用于我的通知。

我的问题是没有调用onReceive()。代码一直到达alarmManager.set()正确。我阅读了很多帖子并尝试了不同的方式来注册我的BroadcastReceiver。关于可能出错的任何想法?

AlarmTask

public class AlarmTask implements Runnable {
    private final Calendar date;
    private final AlarmManager alarmManager;
    private final Context context;
    private long mGoalId;

    public AlarmTask(Context context, Calendar date, long goalId) {
        this.context = context;
        this.alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        this.date = date;
        mGoalId = goalId;
    }

    @Override
    public void run() {
        Log.e("AlarmTask", "run executed with request code: " + mGoalId);
        // Request to start the service when the alarm date is upon us
        Intent intent = new Intent(context, NotificationReceiver.class);
        intent.putExtra(NotificationReceiver.INTENT_NOTIFY, true);
        // mGoalId is the unique goal id that is gonna be used for deletion
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int)mGoalId, intent, 0);
        alarmManager.set(AlarmManager.RTC, date.getTimeInMillis(), pendingIntent);
    }
}

NotificationReceiver

public class NotificationReceiver extends BroadcastReceiver {
    // Unique id to identify the notification.
    private static final int NOTIFICATION = 123;
    public static final String INTENT_NOTIFY = "com.test.name.services.INTENT_NOTIFY";
    private NotificationManager notificationManager;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("onReceive", "Broadcast fired : " + intent);
        CharSequence title = "Alarm!!";
        int icon = R.drawable.goal;
        CharSequence text = "Your notification time is upon us.";
        long time = System.currentTimeMillis();

        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setSmallIcon(icon);
        builder.setContentTitle(title);
        builder.setContentText(text);
        builder.setVibrate(new long[] { 0, 200, 100, 200 });
        final Notification notification = builder.build();

        notificationManager.notify(NOTIFICATION, notification);
    }
}

清单

<receiver android:name=".broadcasts.NotificationReceiver"></receiver>

0 个答案:

没有答案