Android App中使用AudioManager类来编写音频播放器

手机都有声音模式,声音、静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能。在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用。
AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作
 
以下分别是AudioManager设置声音模式和调整声音大小的方法。
 
 
如何获取声音管理器:

AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

里面主要的方法:
A、设置声音模式

//声音模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); //静音模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); //震动模式 AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);

B、调整声音大小

//减少声音音量 AudioManager.adjustVolume(AudioManager.ADJUST_LOWER, 0); //调大声音音量 AudioManager.adjustVolume(AudioManager.ADJUST_RAISE, 0); (当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。)

C、getMode()获取音频模式
D、getRingerMode()获取铃声震动模式

public void setStreamMute (int streamType, boolean state)

静音或不静音音频流:
静音命令被保护以免客户端进程死亡:若具有流上的活动静音请求的进程死亡,这个流会自动取消静音。
对于给定的流,静音请求是累计的:AudioManager会从一个或多个客户端接收数个静音请求,只有当接收到相同数目的取消静音请求时流才会取消静音。
为了更好的用户体验,应该程序必须在onPause()中取消已静音流,若合适在onResume()中再次静音
 
这个方法只能用于代替音频设置的平台范围管理应用程序或主要电话应用程序。

调用示例:

import android.app.Activity; import android.app.Service; 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.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ToggleButton; public class AutoActivity extends Activity { Button play, up, down,stop; ToggleButton mute; AudioManager aManager; MediaPlayer mPlayer; boolean flag = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_auto); aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE); play = (Button) findViewById(R.id.playBtn); up = (Button) findViewById(R.id.upBtn); down = (Button) findViewById(R.id.downBtn); stop = (Button) findViewById(R.id.stopBtn); mute = (ToggleButton) findViewById(R.id.silenceBtn); // 初始化MediaPlayer对象,准备播放音乐 mPlayer = MediaPlayer.create(AutoActivity.this, R.raw.love); play.setOnClickListener(new OnClickListener() { //音乐播放和暂停 @Override public void onClick(View v) { // 设置循环播放 if(flag) { play.setText("暂停"); mPlayer.setLooping(true);//音乐的循环播放 mPlayer.start(); flag = false; }else { play.setText("播放"); mPlayer.pause(); flag = true; } } }); up.setOnClickListener(new OnClickListener() { //提高音量 @Override public void onClick(View v) { // 指定调节音乐的音频,增大音量,而现实音量图形示意 aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); } }); down.setOnClickListener(new OnClickListener() { //降低音量 @Override public void onClick(View v) { // 指定调节音乐的音频,降低音量,而现实音量图形示意 aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); } }); stop.setOnClickListener(new OnClickListener() { //停止音乐 @Override public void onClick(View v) { mPlayer.stop(); play.setText("播放"); flag = true; mPlayer = MediaPlayer.create(AutoActivity.this, R.raw.love); } }); mute.setOnCheckedChangeListener(new OnCheckedChangeListener() { //静音功能 @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { aManager.setStreamMute(AudioManager.STREAM_MUSIC, isChecked); } }); } }

界面布局文件,activity_auto.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="360dp" > <TableRow> <Button android:id="@+id/playBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="播放" /> <Button android:id="@+id/stopBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="停止" /> </TableRow> <TableRow> <Button android:id="@+id/upBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="VOL+" /> <Button android:id="@+id/downBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="VOL-" /> <ToggleButton android:id="@+id/silenceBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="静音" android:textColor="#ff0000" /> </TableRow> </TableLayout> </LinearLayout>

程序比较简单,只有几个简单的功能按钮,但是理解用法用该够了~

MediaPlayer的使用方式和方法,具体来看:
1)如何获得MediaPlayer实例:
   可以使用直接new的方式:

MediaPlayer mp = new MediaPlayer();

也可以使用create的方式,如:

MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了

2) 如何设置要播放的文件:
   MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
   例如:

MediaPlayer.create(this, R.raw.test);

b. 存储在SD卡或其他文件路径下的媒体文件
例如:

mp.setDataSource("/sdcard/test.mp3");

c. 网络上的媒体文件
   例如:

mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");

MediaPlayer的setDataSource一共四个方法:

setDataSource (String path)    setDataSource (FileDescriptor fd)    setDataSource (Context context, Uri uri)    setDataSource (FileDescriptor fd, long offset, long length)

3)对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync()  提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
 
 
4)设置播放器的监听器:
   MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、
setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性。

时间: 2024-10-24 08:45:49

Android App中使用AudioManager类来编写音频播放器的相关文章

Android App中使用AudioManager类来编写音频播放器_Android

手机都有声音模式,声音.静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能.在Android手机中,我们同样可以通过Android的SDK提供的声音管理接口来管理手机声音模式以及调整声音大小,这就是Android中AudioManager的使用. AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作   以下分别是AudioManager设置声音模式和调整声音大小的方法.    如何获取声音管理器: AudioManager audioM

求大牛相助-关于android app中接入图灵机器人的空指针异常

问题描述 关于android app中接入图灵机器人的空指针异常 04-08 22:39:17.076: E/AndroidRuntime(24578): FATAL EXCEPTION: main 04-08 22:39:17.076: E/AndroidRuntime(24578): java.lang.NullPointerException 04-08 22:39:17.076: E/AndroidRuntime(24578): at com.example.godness.HttpUt

如何把 byteArray从 Native C发送到 android app中?

问题描述 如何把 byteArray从 Native C发送到 android app中? 我开发了一个 Native application 名称是 test.c,我想从 native C 文件中返回arrayofByte,也可以编译,当我运行程序时,.so 文件生成. 08-28 13:04:08.477: D/dalvikvm(945): No JNI_OnLoad found in /data/data/com.ssg.nativelibtest/lib/libnativelibtest

app-如何在Android APP中实现三维模型展示

问题描述 如何在Android APP中实现三维模型展示 有一个3D Max做的三维模型,要用怎么样的技术手段添加到APP中,就像百度地图的APP中有些建筑就是有三维模型.求大神指点. 解决方案 [android]app中实现时间展示样式 解决方案二: Unity 3D可以解决你的问题

Android开发中日期工具类DateUtil完整实例

本文实例讲述了Android开发中日期工具类DateUtil.分享给大家供大家参考,具体如下: /** * 日期操作工具类. * @Project ERPForAndroid * @Package com.ymerp.android.tools * @author chenlin * @version 1.0 */ @SuppressLint("SimpleDateFormat") public class DateUtil { private static final String

异常处理-VS2010中编写YUV播放器编译时显示未经处理的异常: 0xC0000005

问题描述 VS2010中编写YUV播放器编译时显示未经处理的异常: 0xC0000005 编译时报错:Frame Enhancement.exe 中的 0x002f1e7b 处有未经处理的异常: 0xC0000005: 读取位置 0x000000e8 时发生访问冲突 部分代码: DWORD WINAPI CFrameEnhancementDlg::ThreadProc1(LPVOID lparam) { CFrameEnhancementDlg*read=(CFrameEnhancementDl

实例解析使用Java实现基本的音频播放器的编写要点_java

 Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放因素,要知道最早的Java 1.1版本中,没有后来的javax.sound包,音频只能通过Applet包调取--   遗憾的是,在图形程序开发中,我们的程序却又难免要使用到背景音乐.效果音等配合图像操作,哎,这实在是Sun大神给我们开的一个不打不小的玩笑.万幸后来Sun大神开眼,提供了javax.sound包,才解救我们于水深火热当中~  但是继之而来的问题是,在ja

在主页中编制音频播放器

虽然Netscape和IE都支持音频文件的播放,但在制作过程中还是遇到了这样一个问题: 如果用隐藏方式播放则没有声卡的用户要出错,影响主页的整体效果.编一个既便于用户控制又能给页面起到点缀作用的音频播放器不失为一个好办法.下面详细介绍用JavaScript 自编音频播放器的方法. 1. Netscape的音频播放器 1)直接打开 Netscape支持.mid. .wav和.au等音频文件格式,您可以在浏览器中直接打开上述文件,打开时出现如下图的播放器窗口并自动播放一次,继续播放可单击"PLAY&

Android App中DrawerLayout抽屉效果的菜单编写实例_php技巧

抽屉效果的导航菜单看了很多应用,觉得这种侧滑的抽屉效果的菜单很好. 不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而且感觉能放很多东西. 库的引用: 首先, DrawerLayout这个类是在Support Library里的,需要加上android-support-v4.jar这个包. 然后程序中用时在前面导入import android.support.v4.widget.DrawerLayout; 如果找不到这个类,首先用SDK Manager更新