Я знаю, что этот вопрос задавался несколько раз раньше. Но ни одно из решений не помогло мне. Вот почему я хотел бы задать вопрос еще раз. Следующая строка принимает только NotificationCompat.Builder(context)
:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, ADMIN_CHANNEL_ID) // Getting error
Я выполнил:
android.support.v4.app.NotificationCompat
Моя версия библиотеки поддержки выше 25
implementation group: 'com.android.support', name: 'appcompat-v7', version: '27.1.1
'
Скомпилировать & Target SDK выше 25
android { compileSdkVersion(27) buildToolsVersion '27.0.3' flavorDimensions 'default' dataBinding { enabled = true } defaultConfig { applicationId('something') minSdkVersion(16) targetSdkVersion(27) versionCode(1) versionName('1.0.0') testInstrumentationRunner('android.support.test.runner.AndroidJUnitRunner') multiDexEnabled true }
Но все равно получаю ошибку. Что я должен сделать, чтобы это исправить? Пожалуйста помоги.
Решение:
В Android 8.0 (Oreo) у вас должно быть что-то, называемое NotificationChannel
Попробуйте следующую реализацию:
Шаг 1: Создать канал уведомлений
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
Наконец: тогда ваше уведомление:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(activity)
.setSmallIcon(R.drawable.ic_launcher_background) // notification icon
.setContentTitle("Notification!") // title for notification
.setContentText("Hello word") // message for notification
.setAutoCancel(true); // clear notification after click
Intent intent = new Intent(activity, RecorderActivity.class);
PendingIntent pi = PendingIntent.getActivity(activity,0,intent, PendingIntent.FLAG_UPDATE_CURRENT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mBuilder.setContentIntent(pi);
notificationManager.notify(1, mBuilder.build());
Пожалуйста, сравните это с Вашим и посмотрите, работает ли это
Попробуйте это, надеюсь, это поможет.
Насколько я знаю, вы можете добавить канал уведомлений только для версий больше или равных 26, версии ниже Android 8.0 не поддерживает канал уведомлений. Мое предложение будет использовать следующие коды:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, ADMIN_CHANNEL_ID)
}
else NotificationCompat.Builder(context)
Сначала создайте канал уведомлений и идентификатор канала передачи уведомлений.
NotificationManager notificationManager = (NotificationManager)context
.getSystemService(Context.NOTIFICATION_SERVICE);
buildNotificationChannel(manager,String <Channel_ID>,String description);
Создать канал уведомлений.
public void buildNotificationChannel(NotificationManager manager, String channelID,
String description) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (manager.getNotificationChannel(channelID) == null) {
NotificationChannel channel = new NotificationChannel(channelID,
description,NotificationManager.IMPORTANCE_LOW);
channel.setDescription(description);
manager.createNotificationChannel(channel);
}
}
}
Создать уведомление, передавая аргумент ID канала
Notification notification = new
NotificationCompat.Builder(context,<Channel_ID>)
.setSmallIcon(R.drawable.app_icon)
.setContentTitle("Title goes here.")
.setPriority(Notification.PRIORITY_HIGH)
.setContentIntent(pendingIntent)
.setAutoCancel(false)
.setOngoing(true)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setContentText("Content Text").build();
notificationManager.notify(ID,notification);
NotificationCompat.Builder()
не принимает 2-й аргумент.