Android Изменение режима звонка без разрешения политики DND - PullRequest
0 голосов
/ 14 марта 2020

Я создаю виджет приложения на Android, который позволяет пользователю изменять его режим звонка. Я уже видел виджет приложения, который делает это достаточно гибко, не запрашивая у пользователя никакого разрешения, т.е.: https://play.google.com/store/apps/details?id=com.guywmustang.silentwidget

enter image description here

В моем приложении работает функция «Звонок до вибрации» и «Вибрация до звонка», но при попытке изменить ошибку выдается ниже. Звонок в Беззвучный режим или наоборот

java.lang.SecurityException: Not allowed to change Do Not Disturb state
        at android.os.Parcel.createException(Parcel.java:1953)
        at android.os.Parcel.readException(Parcel.java:1921)
        at android.os.Parcel.readException(Parcel.java:1871)
        at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:1328)
        at android.media.AudioManager.setRingerMode(AudioManager.java:1144)

Кто-нибудь может рассказать, какой трюк использует виджет playstore?

мой код, протестированный на Redmi Note 7, Android 9.0:

    AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
                switch (am.getRingerMode()) {
                    case AudioManager.RINGER_MODE_SILENT:
                        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        break;
                    case AudioManager.RINGER_MODE_NORMAL:
                        am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                        break;
                    case AudioManager.RINGER_MODE_VIBRATE:
                        am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                        break;
                }
...