Pu sh Уведомления не вибрируют при закрытии приложения - PullRequest
5 голосов
/ 13 июля 2020

На Android 10, когда я получаю уведомление pu sh, вибрация работает, только если приложение открыто. Если он в фоновом режиме или закрыт, вибрация не работает (но уведомление проходит и звук работает). Это ошибка? Однако не удалось найти его в системе отслеживания ошибок Google.

Я отправляю уведомление pu sh с нашего сервера с полезными данными, что гарантирует вызов onMessageReceived(), даже если приложение находится в фоновом режиме. И есть, могу отладить.

Вот как создается канал уведомлений:

NotificationChannel mChannelUp = new NotificationChannel(CHANNEL_ID_ALERTS_UP, getApplicationContext().getString(R.string.alerts_up), NotificationManager.IMPORTANCE_HIGH);
mChannelUp.enableLights(true);
mChannelUp.enableVibration(true);
//        mChannelUp.setVibrationPattern(new long[]{500, 250, 500, 250}); // doesn't help
mChannelUp.setLightColor(Color.BLUE);

AudioAttributes audioAttributesUp = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_NOTIFICATION_EVENT)
        .build();

mChannelUp.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.notif_sound_up), audioAttributesUp);
notificationManager.createNotificationChannel(mChannelUp);

И само уведомление:

NotificationCompat.Builder mBuilder =
        new NotificationCompat.Builder(this, CHANNEL_ID_ALERTS_UP)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.ic_notif)
                .setColor(ContextCompat.getColor(this, R.color.colorPrimary))
                .setLargeIcon(logo)
                .setVibrate(new long[]{250, 500, 250, 500})
                .setLights(Color.parseColor("#039be5"), 500, 500)
                .setContentTitle("some title")
                .setContentText("some content")
                .setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.notif_sound_up));

mBuilder.setContentIntent(resultPendingIntent);

Notification notif = mBuilder.build();

NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(notificationId, notif);

Ответы [ 5 ]

2 голосов
/ 12 августа 2020

Необходимо вызвать службу вибрации.

vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(2000);
1 голос
/ 13 августа 2020

если на вашем устройстве установлен канал автоматически разных уведомлений в канале уведомлений, вы можете попробовать Firebase по умолчанию Chanel public static String NOTIFICATION_CHANNEL_ID ="fcm_fallback_notification_channel";

Канал

  NotificationManager notificationManager = mContext.GetSystemService(Context.NotificationService) as NotificationManager;

            if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.O)
            {
                NotificationImportance importance = global::Android.App.NotificationImportance.High;
               

                NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, title, importance);
                notificationChannel.EnableLights(true);
                notificationChannel.EnableVibration(true);
                notificationChannel.SetSound(sound, alarmAttributes);
                notificationChannel.SetShowBadge(true);
                
                notificationChannel.Importance = NotificationImportance.High;
                notificationChannel.SetVibrationPattern(new long[] { 100, 200, 300, 400, 500, 400, 300, 200, 400 });

                if (notificationManager != null)
                {
                    mBuilder.SetChannelId(NOTIFICATION_CHANNEL_ID);
                    notificationManager.CreateNotificationChannel(notificationChannel);
                }
            }

            notificationManager.Notify(0, mBuilder.Build());

мой класс :

class NotificationHelper : INotification
{
    private Context mContext;
    private NotificationManager mNotificationManager;
    private NotificationCompat.Builder mBuilder;       
    public static String NOTIFICATION_CHANNEL_ID = "fcm_fallback_notification_channel";

    public NotificationHelper()
    {
        mContext = global::Android.App.Application.Context;
    }
    public void CreateNotification(String title, String message)
    {
        try
        {
            var intent = new Intent(mContext, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            intent.PutExtra(title, message);
            var pendingIntent = PendingIntent.GetActivity(mContext, 0, intent, PendingIntentFlags.OneShot);

            var sound = global::Android.Net.Uri.Parse(ContentResolver.SchemeAndroidResource + "://" + mContext.PackageName + "/"+Resource.Raw.notification);//add sound
          

            // Creating an Audio Attribute
            var alarmAttributes = new AudioAttributes.Builder()
                .SetContentType(AudioContentType.Sonification)             
                .SetUsage(AudioUsageKind.Notification).Build();

            mBuilder = new NotificationCompat.Builder(mContext);
            mBuilder.SetSmallIcon(Resource.Drawable.INH_ICON1);
            mBuilder.SetContentTitle(title)
                    .SetSound(sound)
                    .SetAutoCancel(true)
                    .SetContentTitle(title)
                    .SetContentText(message)
                    .SetChannelId(NOTIFICATION_CHANNEL_ID)
                    .SetPriority((int)NotificationPriority.High)
                    .SetLights(65536, 1000, 500)
                    //.SetColor(Resource.Color.)
                    .SetVibrate(new long[] { 100, 200, 300, 400, 500, 400, 300, 200, 400 })
                    .SetDefaults((int)NotificationDefaults.Sound | (int)NotificationDefaults.Vibrate)
                    .SetVisibility((int)NotificationVisibility.Public)
                    .SetSmallIcon(Resource.Drawable.INH_ICON1)
                    .SetContentIntent(pendingIntent);

           

            NotificationManager notificationManager = mContext.GetSystemService(Context.NotificationService) as NotificationManager;

            if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.O)
            {
                NotificationImportance importance = global::Android.App.NotificationImportance.High;
               

                NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, title, importance);
                notificationChannel.EnableLights(true);
                notificationChannel.EnableVibration(true);
                notificationChannel.SetSound(sound, alarmAttributes);
                notificationChannel.SetShowBadge(true);
                
                notificationChannel.Importance = NotificationImportance.High;
                notificationChannel.SetVibrationPattern(new long[] { 100, 200, 300, 400, 500, 400, 300, 200, 400 });

                if (notificationManager != null)
                {
                    mBuilder.SetChannelId(NOTIFICATION_CHANNEL_ID);
                    notificationManager.CreateNotificationChannel(notificationChannel);
                }
            }

            notificationManager.Notify(0, mBuilder.Build());
        }
        catch (Exception ex)
        {
            //
        }
    }
}
0 голосов
/ 14 августа 2020

Теперь я заметил это в Logcat:

Игнорирование входящей вибрации, поскольку процесс с uid = 10587 является фоном, usage = USAGE_NOTIFICATION_EVENT

Чтобы вибрация работала даже когда приложение работает в фоновом режиме, вам нужно использовать AudioAttributes.USAGE_NOTIFICATION (USAGE_NOTIFICATION_EVENT не будет работать!) И также setVibrationPattern на канале:

AudioAttributes audioAttributes = new AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_NOTIFICATION)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();

NotificationChannel mChannelUp = new NotificationChannel(CHANNEL_ID_ALERTS_UP, getApplicationContext().getString(R.string.alerts_up), NotificationManager.IMPORTANCE_HIGH);
mChannelUp.enableLights(true);
mChannelUp.enableVibration(true);
mChannelUp.setVibrationPattern(new long[]{0, 300, 250, 300, 250, 300});
mChannelUp.setLightColor(Color.BLUE);
mChannelUp.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/" + R.raw.notif_sound_up), audioAttributes);
notificationManager.createNotificationChannel(mChannelUp);

Теперь вибрация работает и в фоновом режиме.

Благодаря ответу иджигарсоланки , который помог мне это осознать.

0 голосов
/ 12 августа 2020

Предлагаем задать вопрос здесь: https://eu.community.samsung.com/t5/galaxy-s10e-s10-s10-s10-5g/s10-has-stopped-vibrating-when-reciving-notifications/m-p/1567092

Попробуйте перейти к: Настройки> Звук и вибрация> Интенсивность вибрации> Установите все параметры на максимум

0 голосов
/ 11 августа 2020

По ссылке Firebase, когда ваше приложение находится в фоновом режиме, уведомление доставляется на панель задач устройства. При нажатии пользователем на уведомление по умолчанию открывается панель запуска приложений.

Сообщения с уведомлением и полезными данными, полученные в фоновом режиме. В этом случае уведомление доставляется в системный лоток устройства, а полезные данные доставляются в дополнениях намерения вашей активности запуска. В этот раз вибрации не могло быть.

Вы можете попробовать разбудить приложение, когда вы получили уведомление. Это может вам помочь.

Ссылка на Firebase

Android P ie И более новые версии имеют некоторые ограничения. Проверьте это ссылка

...