Включение / выключение звука телефона, вибрации и доступа к Интернету с помощью 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);
    }
Другие вопросы по тегам