Изменение настроек вибрации в Jelly Bean, Android

Я ищу, как мы меняем настройки вибрации в Jelly Bean. Я обнаружил, что все настройки вибрации до JB устарели, но я не вижу нигде нового кода AudioManager.[Изменить настройки вибрации]. Есть настройка "Вибрировать при звонке", с которой хотелось бы узнать, как играть.

Спасибо за помощь.

4 ответа

Решение

В Android4.1 вы можете использовать это, чтобы контролировать "вибрировать и звонить"

Settings.System.putInt(mContentResolver, Settings.System.VIBRATE_WHEN_RINGING, enable ? 1 : 0);

Из документации:

This method is deprecated.
Applications should maintain their own vibrate policy based on current ringer mode that can be queried via getRingerMode().

Похоже, что Google хочет, чтобы параметры вибрации обрабатывались каждым приложением отдельно для каждого приложения, настраивая его, запрашивая getRingerMode ().

Эта проблема преследует меня уже пару дней. Наконец-то все заработало. Убедитесь, что у вас есть необходимые разрешения.

использование-разрешение android:name="android.permission.WRITE_SETTINGS"/

protected void onCreate(Bundle savedInstanceState) {
    audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

}

Затем в моем слушателе по щелчку я использовал следующее:

                lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    if (vibrate == 1) {
                        try {
                            Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 1);
                            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON); //Set it to never vibrate on ring:
                            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON); //Set it to never vibrate on notify

                            boolean vibrateWhenRinging;
                            vibrateWhenRinging = (Settings.System.getInt(getContentResolver(), "vibrate_when_ringing") == 1);
                            Toast.makeText(MainActivity.this, Boolean.toString(vibrateWhenRinging), Toast.LENGTH_LONG).show();
                        } catch (Exception e) {
                            Toast.makeText(MainActivity.this, "System vibrate error", Toast.LENGTH_LONG).show();
                        }
                    } else {
                        try {
                            Settings.System.putInt(getContentResolver(), "vibrate_when_ringing", 0);
                            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF); //Set it to never vibrate on ring:
                            audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF); //Set it to never vibrate on notify

                            boolean vibrateWhenRinging;
                            vibrateWhenRinging = (Settings.System.getInt(getContentResolver(), "vibrate_when_ringing") == 1);
                            Toast.makeText(MainActivity.this, Boolean.toString(vibrateWhenRinging), Toast.LENGTH_LONG).show();
                        } catch (Exception e) {
                            Toast.makeText(MainActivity.this, "System vibrate error in else statement", Toast.LENGTH_LONG).show();
                        }
                    }
                }

Settings.System.VIBRATE_WHEN_RINGING объявлен с аннотацией @hide, поэтому у вас могут возникнуть проблемы с его использованием в Android Studio. Так что, возможно, вам придется заменить Settings.System.VIBRATE_WHEN_RINGING по стоимости: "vibrate_when_ringing"

Досадно, что он объявлен с аннотацией @hide, потому что это означает, что Google не хочет, чтобы внешние разработчики использовали его...

Другие вопросы по тегам