本文所讲内容是如何使用AudioManager来调节播放器的音量。首先说说大体的思路:用ProgressBar控件显示当前音量的大小;在Button控件的单击事件中改变音量的大小;最后也是最重要的是用什么控制音量,查了下资料,发现AudioManager可以调节各种类型的声音的音量,例如音乐声音、通话声音和铃声声音等。本文中所讲的是调节音乐的声音。
本文涉及到的关键技术点包括:ProgressBar的使用、用MediaPlayer播放MP3音乐和AudioManager的使用。
下面分步骤讲解:
第一步:新建一个工程,命名为AudioManagerVolume,Activity命名为AdjustVolumeActivity。
修改布局文件main.xml。修改后的代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- Android:orientation="vertical" android:layout_width="fill_parent"
- Android:layout_height="fill_parent" android:background="#FFFFFF">
- <Button Android:id="@+id/play" android:layout_width="wrap_content"
- Android:layout_height="wrap_content" android:text="播放MP3音乐" />
- <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- Android:orientation="horizontal" android:layout_width="fill_parent"
- Android:layout_height="fill_parent">
- <Button Android:id="@+id/down" android:layout_width="wrap_content"
- Android:layout_height="wrap_content" android:text="减小" />
- <ProgressBar Android:id="@+id/progress"
- style="?Android:attr/progressBarStyleHorizontal"
- Android:layout_width="150dip" android:layout_height="wrap_content"
- />
- <Button Android:id="@+id/up" android:layout_width="wrap_content"
- Android:layout_height="wrap_content" android:text="增大" />
- </LinearLayout>
- </LinearLayout>
第二步:修改AdjustVolumeActivity类。修改后代码如下:
- package com.zyg.demo.adjustvolume;
- import java.io.IOException;
- import Android.app.Activity;
- import Android.content.Context;
- import Android.content.res.AssetFileDescriptor;
- import Android.content.res.AssetManager;
- import Android.media.AudioManager;
- import Android.media.MediaPlayer;
- import Android.os.Bundle;
- import Android.view.View;
- import Android.view.View.OnClickListener;
- import Android.widget.Button;
- import Android.widget.ProgressBar;
- import com.zyg.demo.progressbar.R;
- public class AdjustVolumeActivity extends Activity implements OnClickListener {
- private Button play = null;
- private Button down = null;
- private Button up = null;
- private ProgressBar pb = null;
- private int maxVolume = 50; // 最大音量值
- private int curVolume = 20; // 当前音量值
- private int stepVolume = 0; // 每次调整的音量幅度
- private MediaPlayer mediaPlayer = null;// 播放器
- private AudioManager audioMgr = null; // Audio管理器,用了控制音量
- private AssetManager assetMgr = null; // 资源管理器
- private final String musicName = "hehe.MP3";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- // 初始化播放器、音量数据等相关工作
- initPlayWork();
- // 初始化视图
- initUI();
- }
- /**
- * 初始化UI
- */
- private void initUI() {
- play = (Button) findViewById(R.id.play);
- down = (Button) findViewById(R.id.down);
- up = (Button) findViewById(R.id.up);
- play.setOnClickListener(this);
- down.setOnClickListener(this);
- up.setOnClickListener(this);
- // 设置进度条
- pb = (ProgressBar) findViewById(R.id.progress);
- pb.setMax(maxVolume);
- pb.setProgress(curVolume);
- }
- /**
- * 初始化播放器、音量数据等相关工作
- */
- private void initPlayWork() {
- audioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- // 获取最大音乐音量
- maxVolume = audioMgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
- // 初始化音量大概为最大音量的1/2
- curVolume = maxVolume / 2;
- // 每次调整的音量大概为最大音量的1/6
- stepVolume = maxVolume / 6;
- mediaPlayer = new MediaPlayer();
- assetMgr = this.getAssets();
- }
- /**
- * 准备播放音乐
- *
- * @param music
- */
- private void prepareAndPlay() {
- try {
- // 打开指定音乐文件
- AssetFileDescriptor afd = assetMgr.openFd(musicName);
- mediaPlayer.reset();
- // 使用MediaPlayer加载指定的声音文件。
- mediaPlayer.setDataSource(afd.getFileDescriptor(),
- afd.getStartOffset(), afd.getLength());
- // 准备声音
- mediaPlayer.prepare();
- // 播放
- mediaPlayer.start();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- /**
- * 调整音量
- */
- private void adjustVolume() {
- audioMgr.setStreamVolume(AudioManager.STREAM_MUSIC, curVolume,
- AudioManager.FLAG_PLAY_SOUND);
- }
- @Override
- public void onClick(View v) {
- int id = v.getId();
- switch (id) {
- case R.id.play://按下播放按钮
- prepareAndPlay();
- break;
- case R.id.up://按下增大音量按钮
- curVolume += stepVolume;
- if (curVolume >= maxVolume) {
- curVolume = maxVolume;
- }
- pb.setProgress(curVolume);
- break;
- case R.id.down://按下减小音量按钮
- curVolume -= stepVolume;
- if (curVolume <= 0) {
- curVolume = 0;
- }
- pb.setProgress(curVolume);
- break;
- default:
- break;
- }
- // 调整音量
- adjustVolume();
- }
- }
备注:有的文章中提到需要添加权限<uses-permission Android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ,我这里并没有添加,可以正常运行。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。