Как отключить/снова включить вибрацию, возникающую при получении уведомления?
Я определяю пользовательскую вибрацию для конкретной функции при получении уведомления.
Однако, когда экран телефона выключен, пользовательская вибрация воспроизводится вместе с вибрацией уведомления по умолчанию.
Я попытался поместить телефон в тихий режим и удалить его из бесшумного режима программно, а также попытался использовать частичный 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