2017-10-27 5 views
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); 
     } 
    } 

} 

答えて

0

私はこのコードで私の問題を解決しました:

private void mute() { 
     //mute audio 
     aManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
      aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0); 
     } else { 
      aManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); 
     } 
    } 

    public void unmute() { 
     //unmute audio 
     aManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
      aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, 0); 
     } else { 
      aManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0); 
     } 
    } 
関連する問題