Если вы хотите добиться ТОЧНО такого результата, я думаю, вам нужно переписать с нуля SwitchPreference, который должен дождаться результата обратного вызова onChanged (), прежде чем продолжить, изменив его внутреннее состояние.
Или выможет оставить компонент в более новом / измененном состоянии, а затем вернуться только к предыдущему состоянию, если разрешение не предоставлено.Диалоги запроса разрешения не могут быть пропущены, поэтому, даже если SwitchPreference уже изменен, пользователь не может сделать так много в вашей Деятельности, пока он не разрешит или не отклонит Разрешение, поэтому вполне безопасно оставить SwitchPreference во временном состоянии.