通过点击按钮实现播放、暂停和关闭(重置)音频和视频
一、知识点
1. 音频
在Android中一般使用MediaPlayer类来实现播放音频文件。
方法名 | 功能描述 |
setDataSource() | 设置要播放的音频文件的位置 |
prepare() | 在开始播放之前调用这个方法完成准备工作 |
start() | 开始或继续播放音频 |
pause() | 暂停播放音频 |
reset() | 将MediaPlayer对象重置到刚刚创建的状态 |
seekTo() | 从指定位置开始播放音频 |
stop() | 停止播放音频。调用这个方法后的MediaPlayer对象无法再播放音频 |
release() | 释放掉与MediaPlayer对象相关的资源 |
isPlaying() | 判断当前MediaPlayer是否正在播放音频 |
getDuration() | 获取载入的音频文件的时长 |
2. 视频
主要使用VideoView类来实现,这个类将视频的显示和控制集于一身。这个类只是帮我们做了一个很好的封装,它的背后仍然是使用MediaPlayer来对视频文件进行控制的。
方法名 | 功能描述 |
setVideoPath() | 设置要播放的视频文件的位置 |
start() | 开始或继续播放视频 |
pause() | 暂停播放视频 |
resume() | 将视频重头开始播放 |
seekTo() | 从指定位置开始播放视频 |
isPlaying() | 判断当前是否正在播放视频 |
getDuration() | 获取载入的视频文件的时长 |
二、Demo
1. 效果图
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.thinkpad.mediaplayer.MainActivity">
<Button
android:id="@+id/play_music"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放音乐"/>
<Button
android:id="@+id/pause_music"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="暂停音乐"/>
<Button
android:id="@+id/stop_music"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="关闭音乐"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000"/>
<Button
android:id="@+id/play_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放视频"/>
<Button
android:id="@+id/pause_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="暂停视频"/>
<Button
android:id="@+id/replay_video"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="重置视频"/>
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3. MainActivity.java
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.VideoView;
import java.io.File;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private MediaPlayer mediaPlayer = new MediaPlayer(); //创建MediaPlayer对象
//各个控件
private Button playMusic;
private Button pauseMusic;
private Button stopMusic;
private Button playVideo;
private Button pauseVideo;
private Button replayVideo;
private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化控件对象
playMusic = (Button)findViewById(R.id.play_music);
pauseMusic = (Button)findViewById(R.id.pause_music);
stopMusic = (Button)findViewById(R.id.stop_music);
playVideo = (Button)findViewById(R.id.play_video);
pauseVideo = (Button)findViewById(R.id.pause_video);
replayVideo = (Button)findViewById(R.id.replay_video);
videoView = (VideoView)findViewById(R.id.video_view);
//设置点击对象
playMusic.setOnClickListener(this);
pauseMusic.setOnClickListener(this);
stopMusic.setOnClickListener(this);
playVideo.setOnClickListener(this);
pauseVideo.setOnClickListener(this);
replayVideo.setOnClickListener(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
initVideoPath();//初始化Viedo
}
}
//初始化MediaPlayer
private void initMediaPlayer(){
try{
File file = new File(Environment.getExternalStorageDirectory(),"xsdhls.mp3");
mediaPlayer.setDataSource(file.getPath()); //指定音频文件的路径
mediaPlayer.prepare();//让MediaPlayer进入到准备状态
}catch (Exception e){
e.printStackTrace();
}
}
//初始化Video
private void initVideoPath(){
File file = new File(Environment.getExternalStorageDirectory(),"如约而至许嵩.mp4");
videoView.setVideoPath(file.getPath());
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
initMediaPlayer();
initVideoPath();
} else {
Toast.makeText(this, "你选的嘛偶像!", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
@Override
public void onClick(View v){
switch (v.getId()){
case R.id.play_music:
if (!mediaPlayer.isPlaying()){
mediaPlayer.start();//开始播放音乐
}
break;
case R.id.pause_music:
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();//暂停音乐
}
break;
case R.id.stop_music:
if (mediaPlayer.isPlaying()){
mediaPlayer.reset(); //停止音乐
initMediaPlayer();
}
break;
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;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();
}
if (videoView != null){
videoView.suspend();
}
}
}
4. AndroidManifest.xml
添加权限说明
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
整理学习自郭霖大佬的《第一行代码》
目前小白一名,持续学习Android中,如有错误请批评指正!