「Android/audio/他アプリの音を制御」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→音のフォーカスを制御) |
|||
| 行1: | 行1: | ||
==音のフォーカスを制御== | ==音のフォーカスを制御== | ||
<pre> | <pre> | ||
| + | 音フォーカスonoff | ||
| + | Button audioforcsButton = (Button)findViewById(R.id.audioforcsbutton); | ||
| + | audioforcsButton.setOnClickListener(new View.OnClickListener() { | ||
| + | public void onClick(View v) { | ||
| + | audioforcs(getApplicationContext()); | ||
| + | } | ||
| + | }); | ||
| + | Button audiounforcsButton = (Button)findViewById(R.id.audiounforcsbutton); | ||
| + | audiounforcsButton.setOnClickListener(new View.OnClickListener() { | ||
| + | public void onClick(View v) { | ||
| + | audiounforcs(getApplicationContext()); | ||
| + | } | ||
| + | }); | ||
| + | } | ||
| + | |||
// 音フォーカスイベント | // 音フォーカスイベント | ||
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() { | AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() { | ||
| 行19: | 行34: | ||
} | } | ||
}; | }; | ||
| − | + | // 音のフォーカスを取得 | |
| − | 音のフォーカスを取得 | + | public void audiounforcs() { |
| − | + | AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); | |
| − | AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); | + | int result = am.requestAudioFocus(afChangeListener, |
| − | int result = am.requestAudioFocus(afChangeListener, | + | AudioManager.STREAM_MUSIC, |
| − | + | // AudioManager.AUDIOFOCUS_GAIN // 永続的なフォーカスを要求 | |
| − | + | AudioManager.AUDIOFOCUS_GAIN_TRANSIENT // 一時的なフォーカスを取得 | |
| − | + | // AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE // 一時的なフォーカスを取得(システム音のフォーカスも奪う) | |
| − | + | // AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK // バック音として小さな音にしてフォーカスを要求 | |
| − | + | ||
); | ); | ||
| − | if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { | + | if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { |
| − | + | Log.i(TAG, "AudioManager.AUDIOFOCUS_REQUEST_GRANTED"); | |
| + | } | ||
| + | } | ||
| + | // 音のフォーカスを外す | ||
| + | public void audiounforcs() { | ||
| + | AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); | ||
| + | am.abandonAudioFocus(afChangeListener); // 音楽削除 | ||
| + | // AUDIOFOCUS_GAIN で要求してた場合は、バック音は流れないまま。 | ||
| + | // AUDIOFOCUS_GAIN_TRANSIENT で要求してた場合は、バックで流してた音楽が元に戻る | ||
| + | // AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE で要求してた場合は、バックで流してた音楽が元に戻る | ||
| + | // AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK で要求してた場合は、バックで流してた音楽が元に戻る | ||
} | } | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</pre> | </pre> | ||
2018年11月22日 (木) 18:36時点における版
音のフォーカスを制御
音フォーカスonoff
Button audioforcsButton = (Button)findViewById(R.id.audioforcsbutton);
audioforcsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audioforcs(getApplicationContext());
}
});
Button audiounforcsButton = (Button)findViewById(R.id.audiounforcsbutton);
audiounforcsButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
audiounforcs(getApplicationContext());
}
});
}
// 音フォーカスイベント
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
Log.i(TAG, "onAudioFocusChange focusChange=" + focusChange);
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
Log.i(TAG, "onAudioFocusChange focusChange=AUDIOFOCUS_LOSS_TRANSIENT");
// Pause playback
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
Log.i(TAG, "onAudioFocusChange focusChange=AUDIOFOCUS_GAIN");
// Resume playback
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
Log.i(TAG, "onAudioFocusChange focusChange=AUDIOFOCUS_LOSS");
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
Log.i(TAG, "onAudioFocusChange focusChange=AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
}
}
};
// 音のフォーカスを取得
public void audiounforcs() {
AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
int result = am.requestAudioFocus(afChangeListener,
AudioManager.STREAM_MUSIC,
// AudioManager.AUDIOFOCUS_GAIN // 永続的なフォーカスを要求
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT // 一時的なフォーカスを取得
// AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE // 一時的なフォーカスを取得(システム音のフォーカスも奪う)
// AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK // バック音として小さな音にしてフォーカスを要求
);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.i(TAG, "AudioManager.AUDIOFOCUS_REQUEST_GRANTED");
}
}
// 音のフォーカスを外す
public void audiounforcs() {
AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
am.abandonAudioFocus(afChangeListener); // 音楽削除
// AUDIOFOCUS_GAIN で要求してた場合は、バック音は流れないまま。
// AUDIOFOCUS_GAIN_TRANSIENT で要求してた場合は、バックで流してた音楽が元に戻る
// AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE で要求してた場合は、バックで流してた音楽が元に戻る
// AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK で要求してた場合は、バックで流してた音楽が元に戻る
}
