手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
Android系统提供了丰富的多媒体表现形式,包括音乐播放、视频播放和录音等。Android系统提供了MediaPlayer类来完成多媒体播放、VideoView类来完成视频播放和MediaRecorder来来完成录音。Android对常用的多媒体格式提供了支持,如3GP、MP3、MP4和WAV等音视频格式。Android对多媒体操作进行了全面的封装,通过简单的代码可以完成常见的多媒体展示,同时还可以播放网络上的多媒体文件。
1.MediaPlayer类:多媒体播放
在Android系统中,MediaPlayer类包含了Audio和Video的播放功能,用于播放音频、视频以及网络上的流媒体。MediaPayer中提供了播放、暂停、停止和重复播放等常用的多媒体播放功能,并且能够设置播放本地多媒体文件,还是网络上的多媒体文件。
1)create方法:创建多媒体
该方法用于创建一个要播放的多媒体,可以通过指定源文件中的多媒体文件来实现,也可以通过指定Uri链接来播放互联网上的多媒体文件。这是一种创建MediaPlayer的静态方法。语法格式有几种:
public static MediaPlayer create(Context context,int resid)
public static MediaPlayer create(Context context,Uri uri)
其中,参数context为上下文,可以通过getApplicationContext()方法获取;参数resid为多媒体文件的资源Id;参数uri为多媒体文件的Uri地址。create方法仅是创建了一个MediaPlayer实例。
2)start方法:开始播放
该方法用于开始播放一个多媒体对象,这是播放多媒体文件的主要方法。如果在播放之前执行了pause方法暂停播放,则再次执行start方法时将从暂停点继续播放。语法格式:
public void start()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
MediaPlayer mp=MediaPlayer.create(getApplicationContext(),R.raw.m1);
mp.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String path="http://mp3.baidu.com/2017/m12345678.mp3";
Uri uri=Uri.parse(path);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(),uri);
mp.start();
}
});
}
}
为了播放本地文件R.raw.m1,需要将m1.mp3文件放置到项目的/res/raw/目录下。互联网文件可替换为网上有效的网址。
3)stop方法:停止播放
该方法用于停止播放多媒体文件。使用该方法后,多媒体对象将停止播放。如果再次调用start方法,则从头开始播放。语法格式:
public void stop()
4)pause方法:暂停播放
该方法用于暂停播放多媒体文件。使用该方法后,多媒体对象将暂停播放。如果再次调用start方法,则从暂停的地方继续播放。语法格式:
public void pause()
5)reset方法:复位多媒体
该方法用于复位多媒体实例。执行该方法后,将使MediaPlayer对象变为未初始化的状态。多媒体复位后,必须重新设置数据源并执行prepare()方法,方可继续播放。该方法还可以使播放器从Error状态中恢复过来。语法格式:
public void reset()
6)setDataSource方法:设置数据源
该方法用于为一个MediaPlayer对象设置播放的数据源。使用该方法可以在程序中动态更改播放的音乐文件,经常用于音乐播放软件设计中。语法格式有几种:
public void serDataSource(FileDescriptor fd)
public void serDataSource(Stringf path)
public void serDataSource(Context context,Uri uri)
其中,参数fd为数据源文件的描述;path为数据源文件的路径,字符串形式;context为上下文,可以通过getApplicationContext()方法获取;uri为多媒体文件的Uri地址。
7)prepare方法:准备播放
该方法用于执行播放之前的准备工作,这是一种同步的调用方法。如果需要使用异步方式播放,可以使用prepareAsync方法。如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare方法了,因为create方法已经调用过了。语法格式:
public void prepare()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
Button btn3=(Button)findViewById(R.id.button3);
final MediaPlayer mp=new MediaPlayer();
final String path="/sdcard/m1.mp3";
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
try{
mp.reset();
mp.setDataSource(path);
mp.prepare();
}catch(IllegalArgumentException e){
e.printStackTrace();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
mp.start();
Toast.makeText(getApplicationContext(),"开始播放",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
mp.stop();
Toast.makeText(getApplicationContext(),"停止播放",
Toast.LENGTH_LONG).show();
}
});
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
mp.pause();
Toast.makeText(getApplicationContext(),"暂停播放",
Toast.LENGTH_LONG).show();
}
});
}
}
8)seekTo方法:指定播放位置
该方法用于指定播放的位置。在默认情况下,都是从0时刻开始播放的。使用该方法,可以指定从哪一时刻开始播放,以毫秒为单位。该方法主要用于用户手动选择播放位置的场合。语法格式:
public void seekTo(int msec)
其中,参数msec为指定的开始播放时间,以毫秒为单位。示例:
int seekpos=10000;
mp.seekTo(seekpos);
mp.start();
9)getDuration方法:获取文件播放时间
该方法用于获取多媒体文件的播放时长,也就是总的播放时间,以毫秒为单位。这是获取音乐文件播放时间的主要方法,常用于获取音乐文件信息的场合。语法格式:
public int getDuration()
示例:
int n=mp.getDuration();
10)setVolume方法:设置音量
该方法用于设置播放多媒体文件时的音量,可以分别设置左声道和右声道的音量大小。使用该方法设置的仅是当前播放对象的音量,而不是系统播放音量。语法格式:
public void setVolume(float leftVolume,float rightVolume)
其中,参数leftVolume为左声道的音量,取值范围0~1;rightVolume为右声道的音量,取值范围为0~1。示例:
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
leftVolume=leftVolume+0.1f;;
rightVolume=rightVolume+0.1f;
mp.setVolume(leftVolume,rightVolume);
Toast.makeText(getApplicationContext(),"当前音量为"+leftVolume,
Toast.LENGTH_LONG).show();
}
});
btn5.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
leftVolume=leftVolume-0.1f;;
rightVolume=rightVolume-0.1f;
mp.setVolume(leftVolume,rightVolume);
Toast.makeText(getApplicationContext(),"当前音量为"+leftVolume,
Toast.LENGTH_LONG).show();
}
});
11)setLooping方法:设置循环播放
该方法用于设置是否循环播放多媒体文件。当设置为true时表示循环播放,false表示仅播放一次。该方法是设置循环播放模式的主要方法。语法格式:
public void setLooping(boolean looping)
其中,参数looping表示是否循环播放,true表示循环播放,false表示仅仅播放一次。示例:
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
if(looping){
looping=false;
btn4.setText("当前为非循环播放");
}else{
looping=true;
btn4.setText("当前为循环播放"):
}
mp.setLooping(looping);
}
});
12)getCurrentPosition方法:获取当前播放位置
该方法用于获取MediaPlayer对象播放的位置,返回值以毫秒为单位。通过该方法并结合进度条,可以实现实时显示播放进度的功能。语法格式:
public int getCurrentPosition()
13)isLooping方法:获取是否循环播放
该方法用于获取MediaPlayer对象是否处于循环播放模式。如果返回值为true则表示处于循环播放模式,如果返回值为false则表示为单曲播放模式。语法格式:
public boolean isLooping()
14)isPlaying方法:获取是否播放
该方法用于获取MediaPlayer对象是否正在播放。如果返回值为true则表示正在播放,如果返回值为false则表示当前没有播放。语法格式:
public boolean isPlaying()
15)setOnCompletionListener方法:设置播放完成监听器
该方法用于设置播放完成监听器。当MediaPlayer对象播放完毕时,将触发该监听器。通过重载onCompletion方法就可以完成一系列用户功能。该方法常常用于播放列表功能的场合,当一个音乐文件完毕时,自动播放下一个音乐文件。语法格式:
public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
其中,参数listener为监听器对象。示例:
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"此曲播放结束",
Toast.LENGTH_LONG).show();
}
});
16)setOnSeekCompleteListener方法:设置寻址完成监听器
该方法用于设置寻址完成监听器。当MediaPlayer对象通过seekTo方法寻址完毕的时候,将触发该监听器。通过重载onSeekComplete方法就可以完成一系列用户功能。该方法常常用于像A-B复读这样的功能的场合。语法格式:
public void setOnSeekCompleteListener(MediaPlayer.OnSeekCompleteListener listener)
其中,参数listener为监听器对象。示例:
mp.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener(){
@Override
public void onSeekComplete(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"已寻址到指定播放位置",
Toast.LENGTH_LONG).show();
}
});
17)setOnPreparedListener方法:设置准备完毕监听器
该方法用于设置准备完毕监听器。当MediaPlayer对象通过prepare方法准备完毕时,将触发该监听器。通过重载onPrepared方法就可以完成一系列用户功能。语法格式:
public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
其中,参数listener为监听器对象。
18)setOnErrorListener方法:设置错误监听器
该方法用于设置播放错误监听器。当MediaPlayer对象播放多媒体文件发生错误时,将触发该监听器。通过重载onError方法就可以完成一系列用户功能,主要是给出一些错误提示信息。语法格式:
public void setOnErrorListener(MediaPlayer.OnErrorListener listener)
其中,参数listener为监听器对象。
19)setOnBufferingUpdateListener方法:设置缓冲监听器
该方法用于设置网络流媒体的缓冲监听器。当MediaPlayer对象播放网络上的多媒体文件并发生缓冲时,将触发该监听器。通过重载onBufferingUpdate方法就可以完成一系列用户功能,这样当缓冲播放的时候可以给使用者提示信息等。语法格式:
public void setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
其中,参数listener为监听器对象。
20)release方法:释放多媒体
该方法用于释放MediaPlayer多媒体对象。当一个MediaPlayer对象播放完毕不再使用时,需要调用该方法来释放其占用的系统资源。语法格式:
public void release()
2.VideoView类:视频播放
在Android系统中,VideoView类用于VideoView控件的显示和控制。VideoView控件可以用于视频播放的显示控制,提供了视频播放的开始、暂停等功能。通过VideoView类可以播放本地的视频文件,也可以用来播放网络上的视频文件。
Android系统支持MP4的H.264、3GP和WMV视频的解析,由于模拟器性能的限制,在模拟器上能正常播放的视频分辨率和码率都比较低。为了达到比较好的效果,能够在Android手机上进行调试会更方便。
1)setMediaController方法:设置播放控制器
该方法由于设置VideoView的播放控制器模式(播放进度条)。这是使用VideoView播放视频前必须调用的方法,一般不单独使用。语法格式:
public void setMediaController(MediaController controller)
其中,参数controller为MediaController对象。
2)setVideoPath方法:设置视频源路径
该方法由于设置VideoView的播放视频源路径,也就是指定播放文件。这是使用VideoView播放视频前必须调用的方法。语法格式:
public void setVideoPath(String path)
其中,path为视频文件的路径信息。
3)start方法:开始播放
该方法用于开始播放一个视频对象,这是播放视频文件的主要方法。如果在播放前执行了pause方法暂停播放,则再次执行start方法时将从暂停点继续播放。语法格式:
public void start()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
final VideoView video=(VideoView)findViewById(R.id.videoView1);
MediaController mediaController=new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setVideoPath("/sdcard/test.mp4");
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.start();
}
});
}
}
为了能正常播放本地SD卡中的视频文件,首先要将视频文件放到SD卡的根目录中。
4)pause方法:暂停播放
该方法用于暂停播放视频文件。使用该方法后,视频对象将暂停播放,如果再次调用start方法,则将从暂停的地方继续播放。语法格式:
public void pause()
示例:
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.pause();
}
});
5)setVideoURI方法:设置视频源地址
该方法用于设置VideoView的播放视频源地址,也就是指定播放文件。这里的源地址可以是本地文件,也可以是网络上的视频文件地址。该方法与setVideoPath方法类似,是使用VideoView播放视频前经常调用的方法。语法格式:
public void setVideoURI(Uri uri)
其中,uri为视频文件的地址信息,可以是本地视频文件的地址,也可以是网络上的视频地址。示例:
Uri uri=Uri.parse("/sdcard/test.mp4");
video.serVideoURI(uri);
6)setVisibility方法:设置是否可见
该方法用于设置VideoView的播放视频源地址,也就是指定播放文件。这里的源地址可以是本地文件,也可以是网络上的视频文件地址。该方法与setVideoPath方法类似,是使用VideoView播放视频前经常调用的方法。语法格式:
public void setVisibility(int visibility)
其中,visibility为VideoView对象是否可见,可以取如下几种值:
·VISIBLE:可见状态
·INVISIBLE:不可见状态
·GONE:不可见状态,并且控件从布局中消失
示例:
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.setVisibility(VideoView.GONE);
}
});
7)getDuration方法:获取视频播放时间
该方法用于获取视频文件的播放时长,也就是总的播放时间,以毫秒为单位。这是获取视频文件播放时间的主要方法。语法格式:
public int getDuration()
示例:
int duration=video.getDuration();
8)setOnCompletionListener方法:视频播放完成监听器
该方法用于设置视频播放完成监听器。当视频对象播放完毕时,将触发该监听器。通过重载onCompletion方法就可以完成一系列用户功能。该方法常用于播放列表功能的场合,当一个视频文件播放完毕时,自动播放下一个视频文件。语法格式:
public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
其中,参数listener为监听器对象。示例:
video.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp){
Toast.makeText(getApplicationContext(),"视频播放结束!",
Toast.LENGTH_LONG).show();
}
});
9)setOnPreparedListener方法:视频准备完毕监听器
该方法用于设置视频准备完毕监听器。当视频对象加载完毕并且可以播放时,将触发该监听器。通过重载onPrepared方法就可以完成一系列用户功能。语法格式:
public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
其中,参数listener为监听器对象。
10)setOnErrorListener方法:视频播放错误监听器
该方法用于设置视频播放错误监听器。当视频对象播放视频文件发生错误时,将触发该监听器。通过重载onError方法就可以完成一系列用户功能,常用于给出一些错误提示信息。语法格式:
public void setOnErrorListener(MediaPlayer.OnErrorListener listener)
其中,参数listener为监听器对象。
11)seekTo方法:指定视频播放位置
该方法用于指定视频播放的位置。默认情况下,都是从0时刻开始播放视频的。使用该方法,可以指定从哪个时刻开始播放,以毫秒为单位,主要用于手动选择视频播放位置的场合。语法格式:
public void seekTo(int msec)
其中,参数msec为指定的视频开始播放时间,以毫秒为单位。示例:
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
int seekpos=20000;
video.seekTo(seekpos);
video.start();
Toast.makeText(getApplicationContext(),"从"+seekpos+"毫秒开始播放",
Toast.LENGTH_LONG).show();
}
});
12)getCurrentPosition方法:获取当前视频播放位置
该方法用于获取VideoView对象播放的当前位置,返回值以毫秒为单位。通过该方法并结合进度条,可以实现实时显示视频播放进度功能。语法格式:
public int getCurrentPosition()
示例:
int pos=video.getCurrentPosition();
13)getBufferPercentage方法:获取缓冲百分比
该方法用于获取VideoView对象播放视频时的缓冲百分比,经常用于播放网络上的视频文件的场合。如果网速比较慢,则可以使用该方法获取缓冲的大小。语法格式:
public int getBufferPercentage()
14)stopPlayback方法:停止回放视频
该方法用于停止回放视频的操作。语法格式:
public void stopPlayback()
15)isPlaying方法:获取是否播放
该方法用于获取VideoView对象是否正在播放视频。如果返回值为true则表示正在播放,如果返回值为false则表示当前没有播放。语法格式:
public boolean isPlaying()
16)canPause方法:获取是否可以暂停
该方法用于获取VideoView对象能否暂停播放视频。如果返回值为true则表示可以暂停播放视频,如果返回值为false则表示不能暂停播放视频。语法格式:
public boolean canPause()
17)canSeekBackward方法:获取是否可以倒退
该方法用于获取VideoView对象能否倒退视频。如果返回值为true则表示可以倒退视频,如果返回值为false则表示不能倒退视频。语法格式:
public boolean canSeekBackward()
18)canSeekForward方法:获取是否可以快进
该方法用于获取VideoView对象能否快进视频。如果返回值为true则表示可以快进视频,如果返回值为false则表示不能快进视频。语法格式:
public boolean canSeekForward()
19)suspend方法:挂起视频播放
该方法用于挂起VideoView对象的视频播放。视频播放被挂起后,将停止播放。该方法经常与resume方法一起使用,用于在播放视频时处理其他重要事件的场合,如播放视频时突然有电话打来。语法格式:
public void suspend()
20)resume方法:恢复视频播放
该方法用于恢复被挂起的VideoView对象的视频播放,恢复之后将从挂起点进行播放。该方法常与suspend方法一起使用,用于在播放视频时处理其他重要事件的场合,如突然有电话打来,此时将调用suspend方法来挂起视频,电话结束后调用resume方法恢复视频播放。语法格式:
public void resume()
示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
Button btn3=(Button)findViewById(R.id.button3);
Button btn4=(Button)findViewById(R.id.button4);
final VideoView video=(VideoView)findViewById(R.id.videoView1);
MediaController mediaController=new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
Uri uri=Uri.parse("/sdcard/test.mp4");
video.setVideoURI(uri);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.start();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.pause();
}
});
btn3.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.suspend();
Toast.makeText(getApplicationContext(),"当前视频播放被挂起!",
Toast.LENGTH_LONG).show();
}
});
btn4.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
video.resume();
Toast.makeText(getApplicationContext(),"当前视频播放恢复!",
Toast.LENGTH_LONG).show();
}
});
}
}
3.MediaRecorder类:录音
在Android系统中,MediaRecorder类用于进行媒体采样,可以完成音频和视频的采集,提供了录音、停止等基本功能。录音机就是一个典型的使用MediaRecorder类的例子,可以设置音频源、编码格式、输出格式、编码比特率和采样比特率。
Android模拟器默认情况下不能录音,如果需要在模拟器上进行调试,需要对其进行设置,以便通过计算机的麦克风来进行录音。打开Android SDK and AVD Manager对话框,在Virtual devices中选中需要设置的模拟器,单击Edit按钮,打开Edit Android Virtual Device(AVD)对话框,在Hardware区域单击New按钮,在打开的对话框中选择Audio recording support,单击确定按钮,返回Edit Android Virtual Device(AVD)对话框,这时Android模拟器已经添加了录音支持。
录音设备需要用到Android系统的录音权限和SD卡的写入操作,需要在AndroidManifest.xml中加入权限:
<uses-permission android:name="android.peimission.RECORD_AUDIO" />
<uses-permission android:name="android.peimission.WRITE_EXTERNAL_STORAGE" />
1)setAudioSource方法:设置音频源
该方法用于设置录音设备的音频源,也就是需要录制音频的对象。Android支持多种音频源,例如麦克风、电话、VoIP等。在进行音频录制时,该方法必须被调用进行设置。语法格式:
public void setAudioSource(int audio_source)
其中,参数audio_source为Android系统支持的录音音频源,可以有如下几种:
·CAMCORDER:如果照相机可用,则使用与相机同方向的麦克风音频源,否则主要设备是麦克风
·DEFAULT:默认设备。这与Android内核有关,一般是麦克风音频源。
·MIC:麦克风音频源。
·VOICE_CALL:语音呼叫上行和下行音源。
·VOICE_COMMUNICATION:经过调整的麦克风音源,如VoIP语音通信。
·VOICE_DOWNLINK:语音呼叫下行(接收)的音频源。
·VOICE_RECOGNITION:经过音源识别调整的麦克风音源,否则行为类似于FEFAULT
·VOICE_UPLINK:语音通话上行(发送)音频信号源。
setAudioSource方法往往需要与其他几个方法结合才能构成录音的基本功能。
2)setOutputFormat方法:设置输出文件格式
该方法用于设置录音设备的输出文件格式,也就是采用什么类型的音频文件。Android系统支持多种音频文件输出格式,如AMR、MPEG4、3GPP等。在进行音频录制时,该方法必须被调用进行设置,且必须在prepare方法之前,而在setAudioSource方法或setVideoSource方法之后,否则将抛出IllegalStateException错误。语法格式:
public void setOutputFormat(int output_format)
其中,参数output_format为Android系统支持的输出文件格式,可以有如下几种:
·AMR_NB:AMR NB文件格式
·AMR_WB:AMR WB文件格式
·DEFAULT:默认输出格式,与Android内核有关
·MPEG_4:MPEG4媒体文件格式
·RAW_AMR:AMR NB文件格式
·THREE_GPP:3GPP的媒体文件格式
setOutputFormat方法往往需要与其他几个方法结合才能构成录音的基本功能。
3)setAudioEncoder方法:设置音频编码
该方法用于设置录音设备的音频编码方式,也就是录制什么类型的音频文件。Android系统支持多种音频编码方式,如ACC、窄带AMR、宽带AMR等。在进行音频录制时,该方法必须被调用进行设置,但必须在prepare方法之前,而在setOutputFormat方法之后,否则将抛出IllegalStateException错误。语法格式:
public void setAudioEncode(int audio_encoder)
其中,参数audio_encoder为Android系统支持的音频编码方式,可以有如下几种:
·AAC:AAC音频编解码器
·AMR_NB:AMR窄带音频编解码器
·AMR_WB:AMR宽带音频编解码器
·DEFAULT:默认音频编码,这与Android内核有关
setAudioEncoder方法往往需要与其他几个方法结合才能构成录音的基本功能。
4)setOutputFile方法:设置输出文件
该方法用于设置录音设备的输出文件,也就是录制保存的文件名称和路径。在进行音频录制的时候,该方法必须被调用进行设置,但必须在prepare方法之前,而在setOutputFormat方法之后,否则将抛出IllegalStateException错误。语法格式有几种:
public void setOutputFile(String path)
public void setOutputFile(FileDescriptor fd)
其中,参数path为字符串形式的输出文件路径;fd为FileDescriptor形式的输出文件。
setOutputFile方法往往需要与其他几个方法结合才能构成录音的基本功能。
5)prepare方法:准备录制
该方法用于执行录制之前的准备工作。在进行录制时,该方法必须被调用进行设置,且必须在start之前,setOutputFormat方法之后,否则将抛出IllegalStateException错误。如果该方法调用失败,则抛出IOException错误。语法格式:
public void prepare()
prepare方法往往需要与其他几个方法结合才能构成录音的基本功能。
6)start方法:开始录制
该方法用于开始执行音频录制,并将捕获的数据编码到指定的文件中。start必须在prepare方法之后调用,否则将抛出IllegalStateException错误。语法格式:
public void start()
start方法往往需要与其他几个方法结合才能构成录音的基本功能。
7)stop方法:停止录音
该方法用于停止音频录音,在调用start方法和stop方法之间是全部录音时间。stop方法必须在start方法之后调用,否则将抛出IllegalStateException错误。语法格式:
public void stop()
有了前面的几个方法,就可以完成最基本的音频录制功能,示例:
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
final MediaRecorder recorder=new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/r1.amr");
try{
recorder.prepare();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.start();
Toast.makeText(getApplicationContext(),"正在录音!",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.stop();
Toast.makeText(getApplicationContext(),"录音已结束!",
Toast.LENGTH_LONG).show();
}
});
}
}
8)release方法:释放录音
该方法用于释放MediaRecorder对象及其所占用的资源。一般来说,在不需要使用MediaRecorder对象的时候,往往需要调用release方法来释放其占用的系统资源。语法格式:
public void release()
示例:简单录音机
public class firstActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder=new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/sdcard/r1.amr");
try{
recorder.prepare();
}catch(IllegalStateException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
recorder.start();
Toast.makeText(getApplicationContext(),"正在录音!",
Toast.LENGTH_LONG).show();
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
recorder.stop();
recorder.release();
Toast.makeText(getApplicationContext(),"录音已结束!",
Toast.LENGTH_LONG).show();
}
});
}
}
9)reset方法:复位对象
该方法用于复位MediaRecorder对象,使其恢复到空闲状态。调用reset方法之后,用户还可以继续使用MediaRecorder对象,但必须对其重新进行设置,包括音频源、输出文件格式、音频编码和输出文件等。语法格式:
public void reset()
10)setMaxFileSize方法:设置文件的最大大小
该方法设置MediaRecorder对象录音文件的最大大小,以字节为单位。当达到预设的文件大小时,将触发setOnInfoListener监听器,停止录音过程,并传递MEDIA_RECORDER_INFO
_MAX_FILESIZE_REACHED参数。该方法必须在setOutFormat方法之后和prepare方法之前调用。语法格式:
public void setMaxFileSize(long max_filesize_bytes)
其中,参数max_filesize_bytes为录音文件的最大大小,单位为字节byte。示例:
recorder.setMaxFileSize(2048);
11)setMaxDuration方法:设置最大录制时间
该方法用于设置MediaRecorder对象录音的最大时间,以毫秒为单位。当达到预设的录音时间时,将触发setOnInfoListener监听器,停止录音过程,并传递MEDIA_RECORDER_INFO _MAX_DURATION_REACHED参数。该方法必须在setOutFormat方法之后和prepare方法之前调用。语法格式:
public void setMaxDuration(long max_duration_ms)
其中,参数max_duration_ms为录音的最长时间,单位为字节ms。示例:
recorder.setMaxDuration(10000);
12)setOnInfoListener方法:设置信息监听器
该方法用于设置MediaRecorder对象信息监听器,使用时需要重载其中的onInfo方法。当MediaRecorder对象在录制过程中达到某些条件时,将触发该监听器,例如达到预设的文件大小、达到预设的录制时间等。语法格式:
public void setOnInfoListener(MediaRecorder.OnInfoListener listener)
其中,参数listener为监听器对象。
recorder.setOnInfoListenter(new MediaRecorder.OnInfoListener(){
@Override
public void onInfo(MediaRecorder mr,int what,int extra){
if(what==MediaRecorder.MEDIA_RECORDER_INFO_MAX_
FILESIZE_REACHED){
Toast.makeText(getApplicationContext(),"已达到预设文件大小,
录音已结束!",Toast.LENGTH_LONG).show();
}
});
13)setOnErrorListener方法:设置错误监听器
该方法用于设置MediaRecorder对象的错误监听器,使用时需要重载其中的onError方法。当在录制中方式错误时,将触发监听器,用户可以在这里进行错误信息的显示和处理。语法格式:
public void setOnErrorListener(MediaRecorder.OnErrorListener listener)
其中,参数listener为监听器对象。
14)setAudioChannels方法:设置声道数量
该方法用于设置录制的声道数量,一般来说,声道数量可以为1或2.该方法必须在prepare方法之前调用,因为prepare方法将会对所设置的声道数进行检查,以确保能用。语法格式:
public void setAudioChannels(int numChannels)
其中,参数numChannels为声道数量。
15)setAudioEncodingBitRate方法:设置编码比特率
该方法用于设置录音编码比特率,必须在prepare方法之前调用,因为prepare方法将会对所设置的编码比特率进行检查,以确保能用。语法格式:
public void setAudioEncodingBitRate(int bitRate)
其中,参数bitRate为编码比特率。
16)setAudioSamplingRate方法:设置采样比特率
该方法用于设置录音采样比特率,必须在prepare方法之前调用,因为prepare方法将会对所设置的采样比特率进行检查,以确保能用。采样比特率往往与编码格式有关,如AAC格式的采样比特率可以为8~96kHz,AMR NB格式的采样比特率为8kHz,AMR WB格式的采样比特率为16kHz。语法格式:
public void setAudioSamplingRate(int samplingRate)
其中,参数samplingRate为采样比特率。