Изменение настроек вибрации в 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 не хочет, чтобы внешние разработчики использовали его...