Я недавно начал кодировать свой действительно первый проект Android, который включает в себя уведомления.Я пишу SDK 21 (Android 5.0).
В настоящее время я отправляю уведомления, нажимая на кнопку в приложении, позже это будет сделано серверным скриптом.Под фактическим телом должна быть кнопка действия, которая делает вещи, когда я нажимаю на нее, а не открываю приложение.
Также я хочу настроить поведение уведомления, когда оно появляется, так что будет воспроизводиться пользовательский звук и устройство условно вибрирует.Для этого я использую NotificationCompat.Builder
для создания уведомления и установки его свойств:
private void sendNotification() {
String title = noteTitleEditText.getText().toString();
String text = noteBodyEditText.getText().toString();
Intent activityIntent = new Intent(this.getContext(), MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this.getContext(), REQUEST_CODE, activityIntent, PendingIntent.FLAG_ONE_SHOT);
Intent broadcastIntent = new Intent(this.getContext, MyNotificationReceiver);
broadcastIntent.putExtra("intent_key", "Action has been triggered");
PendingIntent actionIntent = PendingIntent.getBroadcast(this.getContext, REQUEST_CODE, broadcastIntent, PendingIntent.FLAG_ONE_SHOT);
Notification note = new NotificationCompat.Builder(this.getContext(), getString(R.string.channel_id))
.setSmallIcon(R.mipmap.icon)
.setContentTitle(title)
.setContentText(text)
.setSound(SettingsHandler.getRingtoneUri(this.getContext()))
.setVibrate(SettingsHandler.shouldVibrateOnPush(this.getContext()) ? new long[] {1000} : new long[] {0})
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.addAction(R.mipmap.another_icon, "Action", actionIntent)
.build();
NotificationManagerCompat manager = NotificationManagerCompat.from(this.getContext());
manager.notify(0, note);
}
SettingsHandler - это вспомогательный класс, который предоставляет данные, выбранные пользователем, например, должно ли приложение вибрировать или какой звук должен воспроизводиться.getRingtoneUri
возвращает Uri:
public synchronized static Uri getRingtoneUri(Context context) {
SharedPreferences prefs = context.getSharedPreferences(context.getString(R.string.key), Context.MODE_PRIVATE);
return Uri.parse(prefs.getString(context.getString(R.string.ringtone_uri), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION).toString()));
}
При тестировании это возвращает что-то вроде "content://media/internal/audio/media/31"
shouldVibrateOnPush
возвращает логическое значение, которое указывает, должно ли устройство вибрировать или нет.
Однако консоль отладки говорит, что звук и шаблон вибрации по-прежнему нулевые.У кого-нибудь есть идея, что я делаю не так?Спасибо вперед.