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

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

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

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

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

第一步:新建一个工程,命名为AudioManagerVolume,Activity命名为AdjustVolumeActivity。

修改布局文件main.xml,代码后如下:

Android:orientation="vertical" android:layout_width="fill_parent"

Android:layout_height="fill_parent" android:background="#FFFFFF">

Android:layout_height="wrap_content" android:text="播放MP3音乐" />

Android:orientation="horizontal" android:layout_width="fill_parent"

Android:layout_height="fill_parent">

Android:layout_height="wrap_content"  android:text="减小" />

style="?Android:attr/progressBarStyleHorizontal"

Android:layout_width="150dip" android:layout_height="wrap_content"

/>

Android:layout_height="wrap_content" android:text="增大" />

第二步:修改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();

}

}

备注:有的文章中提到需要添加权限 ,我这里并没有添加,可以正常运行。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐