文章目录
- 播放音频
- 播放视频
播放音频
在Android中播放音频文件一般是使用MediaPlayer类实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使播放音乐的工作变得十分简单。
MediaPlayer类中常用的控制方法。
常用方法名 | 描述 |
---|---|
setDataSource() | 设置要播放的音频文件的位置 |
prepare() | 在开始播放之前调用,以完成准备工作 |
start() | 开始或继续播放音频 |
pause() | 暂停播放音频 |
reset() | 将MediaPlayer对象重置到刚刚创建的状态 |
seekTo | 从指定的位置开始播放音频 |
stop() | 停止播放音频。 |
release() | 释放与MediaPlayer对象相关的资源 |
isPlaying() | 判断当前MediaPlayer是否正在播放音频 |
getDuration() | 获取载入的音频文件的时长 |
新建一个PlayAudioTest项目,然后修改activity_main.xml中的代码。放置3个按钮,分别用于对音频文件进行播放、暂停和停止操作。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:id="@+id/play"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Play" /><Buttonandroid:id="@+id/pause"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Pause" /><Buttonandroid:id="@+id/stop"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Stop" />
</LinearLayout>
在app/src/main这个目录下右击app/src/main→New→Directory,新建assets目录,在这个目录下放入一个音频文件。然后修改MainActivity中的代码。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private MediaPlayer mediaPlayer = new MediaPlayer();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button play = (Button) findViewById(R.id.play);Button pause = (Button) findViewById(R.id.pause);Button stop = (Button) findViewById(R.id.stop);play.setOnClickListener(this);pause.setOnClickListener(this);stop.setOnClickListener(this);if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);} else {initMeidaPlayer(); // 初始化MediaPlayer}}// 初始化MediaPlayerprivate void initMeidaPlayer() {try {AssetFileDescriptor fd = getAssets().openFd("music.mp3");mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());mediaPlayer.prepare(); // 让MediaPlayer进入到准备状态} catch (Exception e) {e.printStackTrace();}}@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {initMeidaPlayer();} else {Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();finish();}break;default:break;}}@Overridepublic 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(); // 停止播放initMeidaPlayer();}break;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();}}
}
最后在AndroidManifest.xml文件中申请权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
播放视频
播放视频文件其实并不比播放音频文件复杂,主要是使用VideoView类来实现的。这个类将视频的显示和控制集于一身,VideoView的用法和MediaPlayer也比较类似。
常用方法名 | 描述 |
---|---|
setVideoPath() | 设置要播放的视频文件的位置 |
start() | 开始或继续播放视频 |
pause() | 暂停播放视频 |
resume() | 将视频从头开始播放 |
seekTo | 从指定的位置开始播放视频 |
isPlaying() | 判断当前是否正在播放视频 |
getDuration() | 获取载入的视频文件的时长 |
suspend() | 释放ViedoView所占用的资源 |
新建PlayVideoTest项目,然后修改activity_main.xml中的代码。放置三个按钮,分别用于控制视频的播放、暂停和重新播放。然后再放置一个VideoView用于显示视频。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content" ><Buttonandroid:id="@+id/play"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Play" /><Buttonandroid:id="@+id/pause"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Pause" /><Buttonandroid:id="@+id/replay"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="Replay" /></LinearLayout><VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>
新建一个目录来放视频文件,右击app/src/main/res→New→Directory,在弹出的对话框中输入“raw”,然后修改MainActivity中的代码。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{private VideoView videoView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);videoView = (VideoView) findViewById(R.id.videoView);Button play = (Button) findViewById(R.id.play);Button pause = (Button) findViewById(R.id.pause);Button replay = (Button) findViewById(R.id.replay);play.setOnClickListener(this);pause.setOnClickListener(this);replay.setOnClickListener(this);if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);} else {initVideoPath(); // 初始化MediaPlayer}}private void initVideoPath() {Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);videoView.setVideoURI(uri);}@Overridepublic void onRequestPermissionsResult (int requestCode, String[] permissions, 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;}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.play:if (!videoView.isPlaying()) {videoView.start(); // 开始播放}break;case R.id.pause:if (videoView.isPlaying()) {videoView.pause(); // 暂停播放}break;case R.id.replay:if (videoView.isPlaying()) {videoView.resume(); // 重新播放}break;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();if (videoView != null) {videoView.suspend();}}
}