您的位置:首页 > 移动开发 > Android开发

Android中音量的控制

2015-07-25 16:11 537 查看
我们知道,一款好的应用中,少不了音乐或者音效,下面就来介绍一下应用中怎样调节音乐的大小:

1.按手机两侧的音量键调节音量,这个有两种方法,下面一一介绍:‘

①使用setVolumeControlStream(AudioManager.STREAM_MUSIC);这一行代码即可。值得注意的是,这个方法是Activity中的。所以要在Activity中调用,而且最好是在Activity的onCreate()方法中调用。我用的时候犯了一个错误,就是Activity的setContentView(View view)中的中我传入了一个View,而不是一个layout,而我又在那个View中想通过

(new Activity()).setVolumeControlStream(AudioManager.STREAM_MUSIC)来调节音量,但是报了一个07-25 07:06:50.906: E/AndroidRuntime(6426): java.lang.IllegalStateException: System services not available to Activities before onCreate()的错误。提醒各位在用的时候一定要在Activity中用,并且是在没有重写onKeyDown方法的时候才能用的。

②通过重写Activity的onKeyDown,并监听KeyEvent.KEYCODE_VOLUME_DOWN和KeyEvent.KEYCODE_VOLUME_UP这两个事件来实现音量的调节。代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//       if(keyCode == KeyEvent.KEYCODE_BACK)
//       {
//           if (MarioView.gameState==MarioView.GAME_ING) {
//                MarioView.nowLevel.getGm().PuaseMusic(false);
//                MarioView.gameState = MarioView.GAME_PAUSE;
//            }

//       }
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

switch (keyCode) {

// 音量减小

case KeyEvent.KEYCODE_VOLUME_DOWN:

mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);

// 音量减小时应该执行的功能代码

return true;

// 音量增大

case KeyEvent.KEYCODE_VOLUME_UP:

mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);

// 音量增大时应该执行的功能代码

return true;

}
return true;
}


其中用到的方法的参数,请各位自行查阅开发文档。

这个方法就是比较繁琐的了。但是有时是比较有用的。比如上面的代码中我注释起来的那部分,就是用来控制其他类中的一些东西。当在Activity中已经重写了onKeyDown的方法,

这时候用这个方法就是比较有用的。我刚刚试验过,如果在Activity中重写了onKeyDown方法,但是没有监听KeyEvent.KEYCODE_VOLUME_DOWN和KeyEvent.KEYCODE_VOLUME_UP这两个事件,想通过使用setVolumeControlStream(AudioManager.STREAM_MUSIC)来实现控制音量,这种方法是不可行的。虽然onKeyDown方法也会被调用,但是setVolumeControlStream(AudioManager.STREAM_MUSIC)不会被调用。

2.直接设置音量的大小:

可以通过下面这行代码:

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
<span style="word-wrap:normal; word-break:normal; line-height:21px"> mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, <wbr>am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), <wbr>AudioManager.FLAG_PLAY_SOUND); </wbr></wbr></span>
其中第二个参数是要设置的音量的大小,这里取得是最大值,有关参数还是请各位来查阅开发文档。

另外,还有一个要提醒大家的事情是:如果Activity中setContentView(View v)的形参是你自己写的一个View类的子类,并且在这个子类中你已经重写了onKeyDown方法,那么在该Activity中,你再重写onKeyDown方法来控制音量是不管用的。这个方法根本就不会被调用。我刚开始就是吃了这个亏。希望各位以此为戒,不要再走我走过的错路。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: