Android(安卓)学习之《第一行代码》第二版 笔记(二十)播放多媒体文件
16lz
2021-01-26
通过点击按钮实现播放、暂停和关闭(重置)音频和视频
一、知识点
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中,如有错误请批评指正!
更多相关文章
- 谷歌宣布Android(安卓)3.0暂停开源
- Android开发从零开始视频教程相关介绍
- Android上定义播放器控件UniversalVideoView
- android videoView 按不同比例缩放
- Android用MediaRecorder实现MPEG4视频监控
- Android开发者指南(12) —— Android(安卓)Supported Media For.
- 本科学习Android笔记之传智播客_快速掌握Android视频教程
- 玩转 Android(安卓)MediaPlayer之视频预加载(优化)
- 【Andorid】短视频拍摄SDK——Vitamio Recorder 2.0 发布(支持ffm