Включение / выключение звука телефона, вибрации и доступа к Интернету с помощью CheckBoxPreference
Как я могу переключить звук всей системы, вибрацию, подключение для передачи данных и Wi-Fi, используя CheckBoxPreference в Android? Я хочу иметь возможность отключить эти вещи во время выполнения активности в моем приложении.
1 ответ
Решение
Я понял.
В res/xml/preferences.xml
добавьте CheckBoxPreferences:
<CheckBoxPreference
android:defaultValue="false"
android:key="pref_disableSoundAndVibration"
android:title="Disable sound and vibration" />
<CheckBoxPreference
android:defaultValue="false"
android:key="pref_disableWifi"
android:title="Disable Wi-Fi" />
В вашей MainActivity добавьте два логических элемента для хранения состояния флажка аудио и Wi-Fi и одно целое число для состояния звонка (Silent, Vibrate, Sound).
protected void onCreate(Bundle savedInstanceState) {
...
mDisableSoundAndVibration = mPref.getBoolean("pref_disableSoundAndVibration", false);
AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
mRingerMode = aManager.getRingerMode();
mDisableWifi = mPref.getBoolean("pref_disableWifi", false);
WifiManager wifiManager = (WifiManager)this.getSystemService(WIFI_SERVICE);
mWifiMode = wifiManager.isWifiEnabled();
...
if (savedInstanceState != null) {
mDisableSoundAndVibration = savedInstanceState.getBoolean("disableSoundAndVibration");
mDisableWifi = savedInstanceState.getBoolean("disableWifi");
...
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
...
mDisableSoundAndVibration = mPref.getBoolean("pref_disableSoundAndVibration", false);
mDisableWifi = mPref.getBoolean("pref_disableWifi", false);
...
}
protected void onSaveInstanceState(Bundle outState) {
...
outState.putBoolean("disableSoundAndVibration", mDisableSoundAndVibration);
outState.putInt("ringerMode", mRingerMode);
outState.putBoolean("disableWifi", mDisableWifi);
....
}
Если вы хотите временно отключить звук и Wi-Fi и сохранить исходное состояние:
if (mDisableSoundAndVibration){
AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
aManager.setRingerMode(aManager.RINGER_MODE_SILENT);
}
if (mDisableWifi){
WifiManager wifiManager = (WifiManager)this.getSystemService(this.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
}
А затем восстановить начальные значения:
if (mDisableSoundAndVibration){
AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE);
aManager.setRingerMode(mRingerMode);
}
if(mDisableWifi){
WifiManager wifiManager = (WifiManager)this.getSystemService(WIFI_SERVICE);
wifiManager.setWifiEnabled(mWifiMode);
}