2017-02-12 11 views
10

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

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

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

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

//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); 

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

ответ

0

Держи

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

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

Надеется, что это помогает.

+1

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

+0

Что вы просите отключить/включить вибрацию в системе Android? По моим сведениям, API-интерфейсы Android Framework не имеют возможности отключать все вибрации для всех приложений. Кто-то сделал приложение, которое может отключить их в общесистемной области - https://play.google.com/store/apps/details?id=sk.blade.globalvibratetoggle Примечание: необходим корневой телефон, так как там не является API для отключения вибраций. Надеюсь, это поможет. – albeee

1

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

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

1

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

Для вашего уведомления, установите 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 в манифесте.

+0

Похоже на вас, и я думаю, что так. Это похоже на то, что я пробовал ... но две проблемы с этим подходом. Это не чистое решение, так как код мешает работе системы (если мы установили телефон в бесшумном режиме ... как только мы получим уведомление ... телефон будет в нормальном режиме), а во-вторых ... когда я вернусь в нормальный или вибрирующий режим ... есть сопровождающий звук и вибрирующий паттерн с этим режимом переключения звонка соответственно .., который мешает настраиваемой вибрации, которую я устанавливаю. Именно поэтому я хочу обходить – SoulRayder

+0

@SoulRayder. Тогда я предлагаю вам отменить систему Вибрации, 'Вибратор v = (Вибратор) getSystemService (Context.VIBRATOR_SERVICE) ; 'и затем' vibr.cancel(); 'во время уведомления. Это должно отменить вибрацию системы, а затем вы можете создать свою собственную вибрацию. –

+0

Это как раз мой вопрос :) – SoulRayder

5

попытаться сделать это

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

это приведет к картине вибрируют использовать Builder уведомления и удалить множество вибрировать, это отключит вибрировать

это мой пример обращения с закупленным звук и вибрации Ex:

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()); 
0

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

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