Как отключить/снова включить вибрацию, возникающую при получении уведомления?

Я определяю пользовательскую вибрацию для конкретной функции при получении уведомления.

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

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

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

//Trying to mute the notification sound and vibration
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
 //Restoring the defaults
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, defaultNotifVolume, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

Пожалуйста, дайте мне знать, как программно отключить/активировать вибрацию уведомления по умолчанию.

Ответ 1

попробуйте сделать это

NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this);

это приведет к созданию вибрирующего используйте построитель уведомлений и удалите набор вибросигнала, это отключит вибрацию

это мой пример обработки звука и вибрации например:

Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentText(body)
                .setContentTitle(title)
                .setSound(soundUri)
                .setLargeIcon(icon)
                .setSound(soundUri)
                .setLights(Color.parseColor("#ffb400"), 50, 10)
                .setVibrate(new long[]{500, 500, 500, 500})
                .setAutoCancel(true)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());

Ответ 2

Это невозможно (возможно, с root?).

Приложения не могут вмешиваться в другие приложения, поэтому, даже если бы это было возможно, это было бы против правил Google Play.

Ответ 3

Я предполагаю, что вы хотите переключить режим звонка на вибрацию или звон или беззвучный.

Для вашего уведомления установите RINGER_MODE в SILENT перед уведомлением и верните его на NORMAL после уведомления.

В Android вам нужно разрешение на изменение настроек устройства для переключения любого параметра настройки. Начните с добавления,

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>,

к манифесту.

Теперь, используйте AudioManager, чтобы получить то, что вы хотите достичь,

AudioManager aManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
aManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

Вы можете иметь RINGER_MODE_VIBRATE, RINGER_MODE_SILENT или RINGER_MODE_NORMAL.

Также добавьте в манифесте разрешение android.permission.VIBRATE.

Ответ 4

Здесь вы идете

public void enableVibration(NotificationCompat.Builder builder, long[] customPattern){
    builder.setVibrate(customPattern);
}

public void disableVibration(NotificationCompat.Builder builder){
    builder.setVibrate(new long[]{0L});
}

Надеюсь, что это поможет.

Ответ 5

Попробуйте сделать это, чтобы отключить вибрацию для получения уведомлений

notificationBuilder.setDefaults(Notification.DEFAULT_LIGHT | Notification.DEFAULT_SOUND)
                   .setVibrate(new long[]{0l}); // Passing null here silently fails