Добавление уведомлений в Android не работает с помощью AlarmManager и BroadcastReceiver

У меня есть возможность для пользователя выбрать время уведомления для его / ее домашней работы, и когда он это сделает, я хочу установить уведомление, которое он получит в то время, которое он выбрал, которое будет напоминать ему, чтобы он сделал свою домашнюю работу.

Пропустите здесь, если вы хотите сразу перейти к части уведомления: if(newNotificationDate!= Null) {

    public void AddHomework() {
    DataBaseManager manager = new DataBaseManager(AddHomeworkActivity.this);
    if (!TextUtils.isEmpty(Subject.getSelectedItem().toString()) && !TextUtils.isEmpty(HomeworkDescription.getText()))
    {
        Homework homework = new Homework(Subject.getSelectedItem().toString(), HomeworkDescription.getText().toString());

        if (!TextUtils.isEmpty(mDueDate.getText()) && !TextUtils.isEmpty(mDueTime.getText()))
        {
            String newDate = mDueDate.getText().toString().concat(" " + mDueTime.getText().toString());

                SimpleDateFormat formatter = new SimpleDateFormat(getString(R.string.dateFormat) , Locale.US);
            try {
                homework.setDueDate(formatter.parse(newDate));
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }



        if (!TextUtils.isEmpty(mNotificationDate.getText()) && !TextUtils.isEmpty(mNotificationTime.getText())) {
            String newDate = mNotificationDate.getText().toString().concat(" " + mNotificationTime.getText().toString());
            SimpleDateFormat formatter = new SimpleDateFormat(getString(R.string.dateFormat),Locale.US );
            Date newNotificationDate = null;
            try {
                homework.setReminderTime(formatter.parse(newDate));
                newNotificationDate = homework.getReminderTime();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            if(newNotificationDate != null) {
                Intent notifyIntent = new Intent(this, MyReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast
                        (context, 1, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                alarmManager.set(AlarmManager.RTC_WAKEUP, newNotificationDate.getTime(), pendingIntent);
            }
        }
        manager.AddHomework(homework);

    }
}

Я добавил класс MyReceiver:

public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {

    Intent intent1 = new Intent(context, MyNewIntentService.class);
    Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show();
    context.startService(intent1);
}

}

Я также добавил класс

public class MyNewIntentService extends IntentService {
private static final int NOTIFICATION_ID = 3;

public MyNewIntentService() {
    super("MyNewIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
    Notification.Builder builder = new Notification.Builder(this);
    builder.setContentTitle("My Title");
    builder.setContentText("This is the Body");
    builder.setSmallIcon(R.mipmap.app_icon_round);
    Intent notifyIntent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    //to be able to launch your activity from the notification
    builder.setContentIntent(pendingIntent);
    Notification notificationCompat = builder.build();
    NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this);
    managerCompat.notify(NOTIFICATION_ID, notificationCompat);
}

}

Я также добавил их в папку манифеста:

 <service
        android:name=".MyNewIntentService"
        android:exported="false" >
    </service>
    <receiver android:name=".MyReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
.
.
.
.
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

Все же это не работает, и я не получаю никакого уведомления вообще. Любое понимание? Дата уведомления корректно превращается в переменную типа Date и включает дату, выбранную пользователем для уведомления. Я хочу, чтобы пользователь получал уведомление на панели уведомлений независимо от того, открыто приложение или нет в указанное время. Я следовал некоторым руководствам, и это то, что я придумал, но я не уверен, должно ли это выполнить то, что я хочу точно.

Спасибо за помощь заранее.

0 ответов

Другие вопросы по тегам