Bereitstellung einer maßgeschneiderten Vibration für bestimmte eingehende Anrufe
-
25-10-2019 - |
Frage
Die Programmfunktionen wie folgt: Der Benutzer verfügt über eine Liste von Telefonnummern, für die das Handy nur dann vibrieren kann, wenn keine andere systemweite Anwendung Vibrationen liefern (z. B. im stummen Modus). Ich weiß, dass dies irgendwie gegen die Regeln ist, da eine Anwendung die Einstellungen der Benutzer respektieren sollte, aber die Anwendung ist auf bestimmte Benutzer mit diesem Bedarf beschränkt. Ich habe zwei Möglichkeiten ausprobiert, aber keiner von ihnen ist befriedigend:
Hören Sie sich den Telefoniezustand an und lösen Sie den Vibrationsdienst direkt mit meinem eigenen Muster aus (mit
Vibrator.vibrate()
). Diese Methode ist effektiv, ohne dass eingehende Anrufe dennoch zufällig wirksam sind, wenn sich das Telefon in der Handy befindetCALL_STATE_RINGING
Staat und ich denke, es liegt an dem Konflikt mit der systemweiten Anwendung, die die Schwingung beim Eintreffen tatsächlich umgeht.Beurteilen Sie, ob das Handy bei einem eingehenden Anruf vibriert (mit
AudioManager.shouldVibrate()
) und entscheiden, ob die Vibrateinstellungen geändert werden sollen (mitAudioManager.setRingerMode()
undAudioManager.setVibrateSetting()
). Wenn die Vibrateinstellungen durch meine Anwendung geändert werden, müssen sie wiederhergestellt werden, sobald das Handy zurück istCALL_STATE_IDLE
Zustand. Diese Methode funktioniert jedoch manchmal immer noch nicht ohne Anzeichen des Grundes.
Ich hoffe, dass jemand zu diesem Thema Ratschläge geben könnte. Kommentare zu diesen beiden oder anderen Möglichkeiten schlagen vor, willkommen zu sein.
Lösung
Sie müssen mit zwei Einstellungen spielen, damit Ihr Telefon vibrieren kann. Der erste ist der Klangmodus, der mithilfe von Aufiomanager festgelegt werden muss:
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(targetSoundMode);
Der zweite Teil ist nicht ordnungsgemäß dokumentiert und ich glaube, dies ist der fehlende Teil Ihres Codes:
String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);
Verwenden Sie 1, um vibrieren Sie ein und 0, um vibrieren.
Um vollständig zu verstehen, wie Sie mit vibrierenden Einstellungen und Modus arbeiten sollten, sehen Sie sich den folgenden Link an:http://hi-android.info/src/com/android/setings/soundsetings.java.html