HardBirch

【Android应用实例之五】调节播放器音量——AudioManager的应用

时间:11-10-05 栏目:iOS移动应用开发技术 作者:张飞不张,文采横飞 评论:0 点击: 2,428 次

 

实现的功能:调节播放器音量。

实现的思路:1)用ProgressBar显示当前音量大小;

                          2)在Button单击事件中改变音量大小;

                          3)关键是用什么控制音量,百度了一下可以用AudioManager调节各类型声音的音量(比如:通话声音、铃声声音、音乐声音等),本文调节的是音乐的声音。

关键技术点:MediaPlayer播放MP3音乐、ProgressBar应用、AudioManager应用

 

参考及相关文章http://blog.csdn.net/m_changgong/article/details/6846000http://lipeng88213.iteye.com/blog/1149352

 

第一步:新建一个工程,命名为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" /> ,我这里并没有添加,可以正常运行。

第三步:运行程序,效果如下:

【Android应用实例之五】调节播放器音量——AudioManager的应用:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐