Ayant un peu de mal à tourner la tête autour de celui-ci.
Dans mon application de contrôle du volume, j'essaie de définir le profil sonore du système sur SILENCIEUX SEULEMENT sans déclencher ne pas déranger, mon application a accès pour modifier les paramètres du MDN et l'accès aux notifications, aucun problème.
Les paramètres système ont un profil silencieux qui laisse le MDN désactivé mais je ne peux pas trouver un moyen de le faire en utilisant le gestionnaire audio?
J'ai tenté de régler le mode sur silencieux, puis de modifier les paramètres du MDN à l'aide de NotificationManager, en désactivant le MDN après avoir réglé le système sur des jeux silencieux en vibration, en désactivant le dnd et en définissant ensuite le silencieux réactivant le MDN.
Code de référence:
int current = audioManager.getRingerMode();
if (current == AudioManager.RINGER_MODE_VIBRATE) {
newIcon = Icon.createWithResource(this, R.drawable.silent);
//ENABLES DND WHEN IT SHOULD ENABLE SILENT
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}
Toute aide serait appréciée car cela me rend un peu fou.
... mais le MDN est pas silencieux. Le MDN peut être configuré pour permettre aux appelants prioritaires de sonner, mais silencieux ne permet à aucun appelant de sonner. Les utilisateurs et les applications devraient donc avoir le choix.
Ce code semble avoir réussi à couper la sonnerie pour moi (sur l'émulateur exécutant l'API 28) et ne définit pas le mode ne pas déranger: -
audio.adjustStreamVolume(AudioManager.STREAM_RING,
AudioManager.ADJUST_MUTE, 0);
Pour rétablir la sonnerie, faites
enter audio.adjustStreamVolume(AudioManager.STREAM_RING,
AudioManager.ADJUST_UNMUTE, 0);
Il existe deux vues du monde en matière de DnD: Avant Android N et après Android N. Avant Android N, vous pouvez utiliser AudioMamnager.setRingerMode(RINGER_MODE_SILENT)
si la sonnerie vous intéresse uniquement. Mais depuis Android N, l'api publique AudioMamnager.setRingerMode (silent) == DND. Par conséquent, pour un silence complet, vous devez basculer DnD.
De plus, si vous souhaitez continuer avec le basculement DnD, vous aurez également besoin de NotificationPolicyAccess.
MISE À JOUR DES ADRESSE DES COMMENTAIRES
Les utilisateurs d'Android ont beaucoup de latitude. Latitudes que les applications n'ont pas.
Pour votre situation, il y a bonnes nouvelles et il y a de mauvaises nouvelles.
La mauvaise nouvelle:
Malheureusement, il n'y a pas de solution que je puisse recommander. C'est un comportement de longue date, testé par le CTS, qui fait taire == MDN. (M -> n'importe quelle application pourrait définir MODE_SILENT et le MDN s'activerait) (N + -> en utilisant MODE_SILENT les premières vérifications dans l'application ont l'autorisation de changer le MDN).
LES BONNES NOUVELLES
Tout d'abord, merci d'avoir partagé votre cas d'utilisation. Il s'avère que l'application appareil photo de Google dispose également d'une fonction d'enregistrement. Et il utilise le MDN pendant l'enregistrement. Le MDN devrait donc être une option viable pour votre situation. Vous devriez pouvoir vérifier cela (j'utilise un appareil Pixel).
Cela semble en effet être un autre bogue bien trop familier dans Android, dans ce paramètre RINGER_MODE_SILENT
ne fait pas ce que la documentation dit qu'il devrait faire. J'ai obtenu le comportement souhaité en:
RINGER_MODE_NORMAL
RINGER_MODE_SILENT
INTERRUPTION_FILTER_ALL
pour remplacer l'état Ne pas déranger défini par erreur.c'est à dire.
audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
J'espère que cela t'aides.