Проверьте, должен ли Xiaomi вибрировать при звонках

Вопрос специфичен для Xiaomi. Знаю, что есть похожие вопросы по поводу устройств на обычной ОС Android.

Существуют разные способы понять, находится ли телефон Android на 100% в режиме «Только вибрация» или включена ли его «Вибрация при вызове» для нормального режима.

Проблема с Xiaomi в том... что никто не работает. По крайней мере, из списка, который у меня есть:

  /**
   * This method should tell us if the vibration is on in the Android System settings
   */
  public boolean checkVibrationIsOn() {
    boolean status = false;
    if (isInVibrationMode()
        || isVibrationOnHacky()
        || isVibrationOnDeprecated()) {
      status = true;
    }
    return status;
  }

  /**
   * Check if the phone is in Vibration mode
   */
  private boolean isInVibrationMode() {
    return audioManager.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE;
  }

  /**
   * Use a direct access to get status of Vibration. Works not on all kinds of phones
   */
  private boolean isVibrationOnHacky() {
    return 0 != Settings.System.getInt(context.getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING,0);
  }

  /**
   * Use a deprecated method to get status of Vibration. It was deprecated so usual apps can't use it
   * but it works on some devices
   */
  private boolean isVibrationOnDeprecated() {
    return audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL
        && audioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_RINGER);
  }

Кто-нибудь знает, как проверить флаги «Также вибрировать при звонках» и «Вибрация в беззвучном режиме» категории «Вибрация» на устройствах Xiaomi?


person Gaket    schedule 15.01.2019    source источник


Ответы (1)


На устройстве Xiaomi есть две настройки вибрации: vibrate_in_normal и vibrate_in_silent. Вам нужно будет проанализировать RingerMode и вызвать Settings.System.getInt() с соответствующей константой:

if (audioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL)
    return Settings.System.getInt(context.getContentResolver(), "vibrate_in_normal",0);
else
    return Settings.System.getInt(context.getContentResolver(), "vibrate_in_silent",0);
person user1081783    schedule 14.09.2020
comment
Извините, но это не работает. Оба getInt() возвращают значение по умолчанию. Протестировано в Redmi Note 9 Pro, Android 10, MIUI 11. - person henrichg; 19.09.2020
comment
только что проверил на новом устройстве, и по умолчанию они были пусты. Когда я запустил систему списка настроек оболочки cmd adb, она не содержала этих настроек в результате. После того, как я изменил в первый раз, настройки присутствуют, не могли бы вы проверить, что после изменения настройки появляются? вы можете запустить для него системную команду adb shell settings list. - person user1081783; 09.10.2020
comment
ОК, еще раз проверил. Результат: если этих параметров нет в Setting.System, по умолчанию для обоих включено. Телефонное приложение сохраняет эти параметры в Настройки.Система. Вибрация при изменении вызова как вибрация_в_нормальном, так и вибрация_при звонке. Но Xiaomi использует vibrate_in_normal. Интересно. :-) @ user1081783 большое спасибо. - person henrichg; 10.10.2020
comment
Хм, но это невозможно изменить: java.lang.IllegalArgumentException: вы не можете сохранить свои настройки в безопасных настройках. Может быть, только в рутированном устройстве. - person henrichg; 10.10.2020