74
меню с пунктом о программе, который открывает диалоговое окно с вашими
ФИО, см. предыдущие 2 задания. Теперь всё готово, можно запускать
приложение и нажимать на кнопку, после чего в панели уведомлений
появится
уведомление от приложения, как показано на рисунках 47-48.
Рисунок 47 – Отображение краткого
уведомления в панели уведомлений
Рисунок 48 – Отображение
уведомления в панели уведомлений
Для
версий Android, начиная с Oreo (Android 8, или API 26) нужен
другой код. Дело в том, что начиная с Oreo появились так называемые
каналы, которые пользователь приложения может настроить самостоятельно,
перейдя в настройки приложения и открыв пункт уведомлений (Notifications).
Поэтому, если у Вас приложение
только для Oreo и выше, в коде нужно
создавать и настраивать канал уведомлений NotificationChannel. Если в
75
gradle-файле приложения заданы minSdkVersion и targetSdkVersion больше
либо равные 26 (Oreo), предусматривать проверку текущей версии Android на
устройстве не надо – просто надо взять новый код с поддержкой каналов.
Однако
часто бывает, что приложение должно поддерживать и старые
версии, и, например, minSdkVersion=16 при targetSdkVersion=28. Тогда в
коде нужно делать проверку
версии Android на устройстве, и для версии,
начиная с Oreo (O), работать с каналами, как показано в коде ниже:
Context context
=
MainActivity
.
this
;
NotificationChannel
newnotchan=
null
;
if
(
android.os.Build
.
VERSION
.
SDK_INT
>=
android.os.Build
.
VERSION_CODES
.
O
) {
newnotchan=
new
NotificationChannel(
"mychannel1"
,
"mychannel"
,
NotificationManager
.
IMPORTANCE_HIGH
);
AudioAttributes audioAttributes
=
new
AudioAttributes
.Builder()
.setContentType(
AudioAttributes
.
CONTENT_TYPE_MUSIC
)
.setUsage(
AudioAttributes
.
USAGE_MEDIA
)
.build();
newnotchan.setSound(
Uri
.
parse(
ContentResolver
.
SCHEME_ANDROID_RES
OURCE
+
"://"
+getPackageName()+
"/"
+
R
.
raw
.
al_heylisten
),
audioAttributes
);
}
NotificationManager notificationManager
= (
NotificationManager
)
getApplicationContext().getSystemService(
Context
.
NOTIFICATION_SE
RVICE
);
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
) {
notificationManager
.createNotificationChannel(newnotchan);
}
Notification
notification =
null
;
if
(
android.os.Build
.
VERSION
.
SDK_INT
>=
android.os.Build
.
VERSION_CODES
.
O
) {
notification =
new
Notification
.Builder(
context
,
"mychannel1"
)
.setContentTitle(
"Hi from Alex"
)
.setContentText(
"Hey, listen!"
)
.setTicker(
"new notification!"
)
.setChannelId(
"mychannel1"
)
.setSmallIcon(
android.R
.
drawable
.
ic_dialog_alert
)
.setOngoing(
true
)
.build();
}
76
notificationManager
.notify(
0
, notification);
Обратите внимание –
для того, чтобы слышать именно тот звук,
который расположен в папке raw, нужно сконфигурировать для канала так
называемые AudioAttributes, а метод setSound, в котором нужны путь к файлу
и эти аудиоатрибуты, затем использовать для канала, а не для уведомления.
В приведённом выше коде отсутствует часть для версий Android ниже Oreo в
конструкторе else, но она есть в начале описания этой лабораторной работы,
и её в этот конструктор не составляет труда добавить, таким образом, сделав
это приложение универсальным.
Достарыңызбен бөлісу: