Я занимаюсь разработкой приложения android, в котором я пытаюсь показать уведомления, когда установлено определенное время.
Я вижу, что появляется ошибка, которая говорит, что
«Не удалось опубликовать уведомление на нулевом канале»
Я приложил код для справки. Это WorkReminder. java
WorkReminder. java
public class WorkReminder extends AppCompatActivity implements View.OnClickListener{
private int notificationId = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_work_reminder);
getSupportActionBar().setTitle("Create reminders");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
findViewById(R.id.set_button).setOnClickListener(this);
findViewById(R.id.cancel_button).setOnClickListener(this);
}
@Override
public void onClick(View v) {
EditText reminder = findViewById(R.id.reminder_text);
TimePicker timePicker = findViewById(R.id.timePicker);
// Set notificationId & text.
Intent intent = new Intent(WorkReminder.this, AlarmReceiver.class);
intent.putExtra("notificationId", notificationId);
intent.putExtra("todo", reminder.getText().toString());
// getBroadcast(context, requestCode, intent, flags)
PendingIntent alarmIntent = PendingIntent.getBroadcast(WorkReminder.this, 0,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
switch (v.getId()) {
case R.id.set_button:
int hour = timePicker.getCurrentHour();
int minute = timePicker.getCurrentMinute();
// Create time.
Calendar startTime = Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, hour);
startTime.set(Calendar.MINUTE, minute);
startTime.set(Calendar.SECOND, 0);
long alarmStartTime = startTime.getTimeInMillis();
// Set alarm.
// set(type, milliseconds, intent)
alarm.set(AlarmManager.RTC_WAKEUP, alarmStartTime, alarmIntent);
Toast.makeText(this, "Done!", Toast.LENGTH_SHORT).show();
break;
case R.id.cancel_button:
alarm.cancel(alarmIntent);
Toast.makeText(this, "Canceled.", Toast.LENGTH_SHORT).show();
break;
}
}
}
Это AlarmReceiver. java
AlarmReceiver. java
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Get id & message from intent.
int notificationId = intent.getIntExtra("notificationId", 0);
String message = intent.getStringExtra("todo");
// When notification is tapped, call MainActivity.
Intent mainIntent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, mainIntent, 0);
NotificationManager myNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// Prepare notification.
Notification.Builder builder = new Notification.Builder(context);
builder.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle("Reminder!")
.setContentText(message)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentIntent(contentIntent)
.setPriority(Notification.PRIORITY_MAX)
.setDefaults(Notification.DEFAULT_ALL);
// Notify
myNotificationManager.notify(notificationId, builder.build());
}
}
Это Activity_work_reminder. xml
activity_work_reminder. xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".WorkReminder">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/reminder_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="3dp"
android:text="Staying hygiene is more important during COVID - 19. Ensure your safety by creating simple reminders to keep you noted."
android:textAlignment="center"
android:textColor="#000"
android:textSize="18dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/reminder_text"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:background="@drawable/corner_edges"
android:ems="10"
android:hint="Reminder"
android:inputType="textPersonName"
android:padding="15dp"
android:textColor="#000"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.18"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/reminder_header" />
<TimePicker
android:id="@+id/timePicker"
android:layout_width="300dp"
android:layout_height="400dp"
android:layout_marginTop="32dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/reminder_text" />
<Button
android:id="@+id/set_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="set reminder"
android:padding="12dp"
android:background="@drawable/corner_edges"
app:layout_constraintEnd_toStartOf="@+id/cancel_button"
app:layout_constraintHorizontal_bias="0.603"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/timePicker" />
<Button
android:id="@+id/cancel_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:layout_marginEnd="76dp"
android:layout_marginRight="76dp"
android:text="cancel"
android:padding="12dp"
android:background="@drawable/corner_edges"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/timePicker" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Предложите мне способ отображения уведомлений.