0
私はオーディオをオン/オフに切り替えるスイッチボタンを実装したアプリを持っています。私は、setStreamMute
が推奨されていないので、ロジックで適切に処理する間に、adjustStreamVolume
を使用することはapi 23以上でしか機能しないことを非常によく理解しています。 しかし、以前はミュートされていないビープ音を消音していないので、デバイスのapiのオーディオ状態に問題があります。スイッチとオーディオの状態はapi 23以上ではうまく機能しますが、デバイスapiの値が23よりも低い場合、デバイスを適切にミュートしてミュートを解除する方法についてのヘルプが必要です。 ここに私のロジックがあります。アンドロイドのミュートを解除する
public class SettingsActivity extends AppCompatActivity {
private Switch mSoundSwitch;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
AudioManager aManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
mSoundSwitch = (Switch) findViewById(R.id.soundSwitch);
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
mSoundSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
unmute();
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean("sound", true);
editor.apply();
} else {
mute();
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean("sound", false);
editor.apply();
}
}
});
// retrieving value from shared preferences (sound)
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
boolean isChecked = sharedPreferences.getBoolean("sound", true);
mSoundSwitch.setChecked(isChecked);
}
private void mute() {
//mute audio
aManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0);
} else {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
}
}
public void unmute() {
//unmute audio
aManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, 0);
} else {
aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
}
}
}