Недавно я начал писать свой первый проект для Android, который включает в себя Firebase Cloud Messaging.Я использую Android SDK 21 (Android 5).
Мое намерение состоит в том, чтобы позволить пользователю выбирать, какую мелодию звонка воспроизводить и вибрировать ли устройство.Для этого я создал вспомогательный класс SettingsHandler
, который обращается к пользовательским настройкам следующим образом:
public synchronized static Uri getRingtoneUri(Context context) {
Sharedpreferences prefs = context.getSharedPreferences("table_name", Context.MODE_PRIVATE);
return Uri.parse(prefs.getString("ringtone_key"), RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION).toString());
}
public synchronized static boolean shouldVibrateOnPush(Context context) {
SharedPreferences prefs = context.getSharedPreferences("table_name", Context.MODE_PRIVATE);
return prefs.getBoolean("vibration_flag", true);
}
Поэтому, когда я получаю Уведомление от Firebase, я хочу установить звук и шаблон вибрации, которые пользовательможно установить, используя методы выше.
Чтобы получить это, я переопределяю метод onMessageReceived
в MyFirebaseMessagingService
, который расширяется - кто ожидал этого - FirebaseMessagingService
:
public void onMessageReceived(RemoteMessage msg) {
super.onMessageReceived(msg);
if (msg.getNotification() != null) {
Intent activityIntent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, REQUEST_CODE, activityIntent, PendingIntent.FLAG_ONE_SHOT);
Notification note = new NotificationCompat.Builder(this, "channel_id")
.setSmallIcon(R.mipmap.icon)
.setContentTitle(msg.getNotification().getTitle())
.setContentText(msg.getNotification().getBody())
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setAutoCancel(true)
.setContentIntent(contentIntent)
.setSound(SettingsHandler.getRingtoneUri(this))
.setVibrate(SettingsHandler.shouldVibrateOnPush ? new long[] {500, 500, 500, 500, 500} : new long[] {0, 0, 0, 0, 0})
.build();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//create notification channels
}
NotificationManagerCompat manager = NotificationManagerCompat.from(this);
manager.notify(1, note);
}
}
Однако, когда я отправляю уведомление, по умолчаниюЗвук звучит всегда, поэтому я начал спрашивать себя, есть ли у меня ошибки в моем мышлении.Любой способ, как это сделать правильно?Спасибо вперед.