夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

Androidで音量設定

Android入門やめようかな←えぇぇぇぇ!!!???

今日も災害ったーv2からのAndroidTipsご紹介。


今回はコードからの音量設定のおはなしです。

いっぱい参考にしました。
http://sites.google.com/site/androidappzz/home/dev/volumesample
http://techbooster.jpn.org/device/1253/
http://duhkka.asasvata.net/2010/12/mediaplayer13-2.html
http://labs.techfirm.co.jp/android/k-matsuda/204
ただどれもシークバーでユーザーに設定させる方法だったので(;´Д`)


もうすこし単純に音量を扱いたい時の方法です。




まずAudioManagerというものを使うのでこんな感じでonCreateに記述。

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

importはEclipseに任せましょう(笑)

ただし、ボタンなどの操作から使いたい場合は先にクラス直下に
private AudioManager audio;
とやっておいたほうがいいでしょうね。

さて、まずは最大音量の設定です。
とりあえず災害ったーから抜粋。

final int ALARM = audio.getStreamMaxVolume(AudioManager.STREAM_ALARM);
final int MUSIC = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
final int NOTIFICATION = audio.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
final int RING = audio.getStreamMaxVolume(AudioManager.STREAM_RING);
final int SYSTEM = audio.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
final int VOICE = audio.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);

これで最大音量の数値を取ることができます。AudioManager.STREAM_*というのがいろんな音量を指定していて上から

  • アラーム音量
  • ミュージック音量
  • ステータスバーの通知音量
  • 着信の音量
  • システム音量
  • 通話音量
多分こんな感じ。
でgetStreamMaxVolumeメソッドで最大値を取得しています。

これでアラームを鳴らす際すべてを最大音量にするということをやったのが、こんな感じです。

Button.OnClickListener sAlarmListener = new Button.OnClickListener() {
public void onClick(View v) {
// 音量を最大に設定
final int ALARM = audio.getStreamMaxVolume(AudioManager.STREAM_ALARM);
final int MUSIC = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
final int NOTIFICATION = audio.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
final int RING = audio.getStreamMaxVolume(AudioManager.STREAM_RING);
final int SYSTEM = audio.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
final int VOICE = audio.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
audio.setStreamVolume(AudioManager.STREAM_ALARM, ALARM, 0);
audio.setStreamVolume(AudioManager.STREAM_MUSIC, MUSIC, 0);
audio.setStreamVolume(AudioManager.STREAM_NOTIFICATION, NOTIFICATION, 0);
audio.setStreamVolume(AudioManager.STREAM_RING, RING, 0);
audio.setStreamVolume(AudioManager.STREAM_SYSTEM, SYSTEM, 0);
audio.setStreamVolume(AudioManager.STREAM_VOICE_CALL, VOICE, 0);
// アラームを起動。ダイアログから位置情報を送れる。
aMp.setLooping(true);
aMp.start();
aAd.show();
}
};

このようにsetStreamVolumeメソッドで音量を設定します。
setStreamVolumeメソッドは第一引数に先ほど軽く説明した音量の種類、第二引数に音量の数値、で、第三引数でUIを変更できるのですが、これを応用してアラームの終了処理にすべての音量を0にしてユーザーにそれを操作させるということをやっています。こんな感じ

// アラームの終了処理
sAlarmBtn.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
aLm.removeUpdates(aLl);
aMp.pause();
// 音量を半分に設定。ユーザーに変えさせる
audio.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_SHOW_UI);
audio.setStreamVolume(AudioManager.STREAM_MUSIC, 0, AudioManager.FLAG_SHOW_UI);
audio.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, AudioManager.FLAG_SHOW_UI);
audio.setStreamVolume(AudioManager.STREAM_RING, 0, AudioManager.FLAG_SHOW_UI);
audio.setStreamVolume(AudioManager.STREAM_SYSTEM, 0, AudioManager.FLAG_SHOW_UI);
audio.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 0, AudioManager.FLAG_SHOW_UI);
return true;
}
});

このように第三引数にAudioManager.FLAG_SHOW_UIを指定するとユーザーにToastで今の音量を知らせることができます。


今回は以上です。

最初の件ですが、もしかしたらこれからは入門というよりこういう記事をいっぱい書いて、あとAndroidアプリケーション技術者認定試験に向けてのまとめ記事などは書くかもしれません。


つまりほんとに入門編中止します。
楽しみにしてた方は申し訳ございませんでした。