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这两个事件来实现音量的调节。代码如下:
其中用到的方法的参数,请各位自行查阅开发文档。
这个方法就是比较繁琐的了。但是有时是比较有用的。比如上面的代码中我注释起来的那部分,就是用来控制其他类中的一些东西。当在Activity中已经重写了onKeyDown的方法,
这时候用这个方法就是比较有用的。我刚刚试验过,如果在Activity中重写了onKeyDown方法,但是没有监听KeyEvent.KEYCODE_VOLUME_DOWN和KeyEvent.KEYCODE_VOLUME_UP这两个事件,想通过使用setVolumeControlStream(AudioManager.STREAM_MUSIC)来实现控制音量,这种方法是不可行的。虽然onKeyDown方法也会被调用,但是setVolumeControlStream(AudioManager.STREAM_MUSIC)不会被调用。
2.直接设置音量的大小:
可以通过下面这行代码:
另外,还有一个要提醒大家的事情是:如果Activity中setContentView(View v)的形参是你自己写的一个View类的子类,并且在这个子类中你已经重写了onKeyDown方法,那么在该Activity中,你再重写onKeyDown方法来控制音量是不管用的。这个方法根本就不会被调用。我刚开始就是吃了这个亏。希望各位以此为戒,不要再走我走过的错路。
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方法来控制音量是不管用的。这个方法根本就不会被调用。我刚开始就是吃了这个亏。希望各位以此为戒,不要再走我走过的错路。
相关文章推荐
- Android中的进程和线程
- GitHub上不错的Android开源项目(三)
- GitHub上不错的Android开源项目(二)
- Github上不错的Android开源代码(一)
- Android 创建Library Project(库项目)与引用操作
- 【Android Studio】git的使用和总结
- Android Studio 常用快捷键
- android观察者设计模式 下载进度同步显示
- Android DownloadManager 的使用
- Android Log及其参数的使用
- android用ViewPager实现欢迎界面
- Android 服务器之SFTP服务器上传下载功能
- Android Recycler View Header Footer 下拉刷新,自动加载更多,空view,loading view
- android5.0学习(一)
- android sdk manager设置国内镜像快速下载sdk
- Android 中View的绘制机制源码分析 四
- 在没有谷歌的时候怎样获取Android源码
- 随机生成名字的Android页面
- 四种结束当前的activity方法
- 项目 代码 对比 android 快速对比差别