Android多媒体应用 二
音频和视频播放
音频播放
步骤:
- 创建MediaPlayer
- 绑定监听
- 运行时权限处理
- 完善
onClick()
- 重写
onDestory()
,释放MediaPlayer
代码
//布局就是4个按钮
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ButterKnife绑定
ButterKnife.bind(this);
//运行时权限
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
initMediaPlayer();//初始化MediaPlayer
}
}
private void initMediaPlayer() {
try {
File file = new File(Environment.getExternalStorageDirectory(),"music.mp3");
mediaPlayer.setDataSource(file.getPath());//指定音频路径
mediaPlayer.prepare();//让MediaPlayer进入准备阶段
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED){
initMediaPlayer();
}else{
Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
@OnClick({R.id.play,R.id.pause,R.id.stop,R.id.jump})
public void onClick(View v){
switch (v.getId()){
case R.id.play:
if (!mediaPlayer.isPlaying()){
mediaPlayer.start();
}
break;
case R.id.pause:
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
}
break;
case R.id.stop:
if (mediaPlayer.isPlaying()){
mediaPlayer.reset();
initMediaPlayer();
}
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();//释放掉与MediaPlayer是否正在播放音频
}
}
}
MediaPlayer常用方法:
方法名 | 功能描述 |
---|---|
setData() |
设置要播放的音频的位置 |
prepare() |
在开始播放前调用此方法完成准备工作 |
start() |
开始或继续播放音频 |
pause() |
暂停播放音频 |
reset() |
将MediaPlayer对象重置到刚刚创建时的状态 |
seekTo() |
从指定的位置开始播放音频 |
stop() |
停止播放。调用这个方法后的MediaPlayer对象无法再播放音频 |
release() |
释放掉与MediaPlayer对象相关的资源 |
isplaying() |
判断当前MediaPlayer是否正在播放音频 |
getDuration() |
获取载入的音频文件的时长 |
注意:
我们还要在AndroidMainfest文件中添加上权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
视频播放
步骤:
- 获取VideoView
- 绑定监听
- 运行权限处理
- 完善
onClick()
- 重写
onDestory()
,释放VideoView
代码:
//布局是三个button加一个VideoView
public class VideoActivity extends AppCompatActivity {
@BindView(R.id.video_view)
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
ButterKnife.bind(this);
//运行和权限处理
if (ContextCompat.checkSelfPermission(VideoActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(VideoActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else{
initVideoPath();
}
}
private void initVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(),"movie.mp4");
//初始化VideoView
videoView.setVideoPath(file.getPath());
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
initVideoPath();
}else{
Toast.makeText(this,"拒绝权限将无法使用程序",Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
break;
}
}
@OnClick({R.id.play_video,R.id.pause_video,R.id.replay_video})
public void onClick(View v){
switch (v.getId()){
case R.id.play_video:
if (!videoView.isPlaying()){
videoView.start();
}
break;
case R.id.pause_video:
if (videoView.isPlaying()){
videoView.pause();
}
break;
case R.id.replay_video:
if (videoView.isPlaying()){
videoView.resume();
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (videoView != null){
videoView.suspend();//释放资源
}
}
}
VideoView常用方法:
方法名 | 功能描述 |
---|---|
setVideoPath() |
设置要播放的视频文件的位置 |
start() |
开始或继续播放视频 |
pause() |
暂停播放视频 |
resume() |
将视频重头开始播放 |
seekTo() |
从指定的位置开始播放视频 |
isPlaying() |
判断当前是否正在播放视频 |
getDuration() |
获取载入的视频文件的时长 |
suspend() |
释放资源 |
注意:
两个示例代码都需要在手机的根目录下预先放好一个音频和视频。
示例来源于《Android第一行代码》,边读边敲,益于学习。