【Android入门到项目实战-- 7.4】—— 如何播放音频和视频

news/2025/2/22 6:56:20/

目录

一、播放音频

 MediaPlayer的工作流程

具体代码实现

二、播放视频

具体代码实现


        学完本篇文章可以收获如何播放音频和视频。

一、播放音频

        播放音频需要使用MediaPlayer类实现,它对各种格式的音频文件提供了全面的控制方法,下面是MediaPlayer类较为常用的控制方法。

 MediaPlayer的工作流程

        首先创建一个MediaPlayer对象,然后调用setDataSource()方法来设置音频文件的路径,再调用prepare()方法使MediaPlayer进入到准备状态,然后调用start()方法就可以开始播放音频,调用pause()方法就会暂停播放,调用reset()方法就会停止播放。

具体代码实现

新建一个PlayAudioTest项目。

修改activity_main.xml文件,代码如下:

        三个按钮分别执行播放、暂停和停止操作。

<?xml version="1.0" encoding="utf-8"?>
<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>

然后修改MainActivity代码,如下:

        首先创建一个MediaPlayer实例,然后在onCreate()方法里进行运行时权限处理,动态申请WRITE_EXTERNAL_STORAGE权限,这是因为我们将在SD卡中设置一个音频文件,为了播放这个文件必须访问SD卡的权限。

        用户同意授权后调用initMediaPlayer()方法为MediaPlayer对象进行初始化操作,在initMediaPlayer()方法中,先通过创建一个File对象来指定音频文件路径,需要提前在SD卡的根目录下放置一个名为music.mp3的音频文件。

        最后在onDestroy()方法中,分别调用stop()方法和release()方法,将与MediaPlayer相关的资源释放掉。

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, 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 (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) {initMediaPlayer();} else {Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();finish();}break;default:}}@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(); // 停止播放initMediaPlayer();}break;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();}}}

最后在AndroidManifest.xml中声明权限,daima 如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />.............

二、播放视频

        播放视频使用VideoView类实现,主要有以下使用方法:

具体代码实现

新建PlayVideoTest项目。

修改activity_main.xml代码如下:

        三个按钮分别用于播放、暂停和重新播放。VideoView用于显示视频。

<?xml version="1.0" encoding="utf-8"?>
<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/video_view"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

修改MainActivity代码,如下:

        和前面的播放音频代码类似,注意需要先在SD卡的根目录下放置一个名为movie.mp4的视频文件。

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.video_view);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, 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() {File file = new File(Environment.getExternalStorageDirectory(), "movie.mp4");videoView.setVideoPath(file.getPath()); // 指定视频文件的路径}@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:}}@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;}}@Overrideprotected void onDestroy() {super.onDestroy();if (videoView != null) {videoView.suspend();}}}

效果如下:

 


http://www.ppmy.cn/news/57935.html

相关文章

每日一题137——删除链表的节点

给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。 返回删除后的链表的头节点。 注意&#xff1a;此题对比原题有改动 示例 1: 输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点&#xff0c;那么在调用…

PHP面试宝典之Swoole

swoole多线程编程 swoole的使用&#xff1a;安装swoole扩展&#xff0c;会与xDebug扩展产生冲突&#xff0c;不支持Windows系统&#xff0c;可以在虚拟机或Mac环境安装 swoole中全局变量都无效&#xff0c;比如&#xff1a; S E S S I O N , _SESSION, S​ESSION,_COOKIE,$_G…

Postman+Java springboot演示 get post put delete请求并携带(路径 路径问号后 json 表单)参数形式

我们先创建一个java的springboot工程 在项目中 找到启动类的位置目录 在项目创建一个类 叫 user 我是想将 user 当做一个属性类的 按规范来讲 我们可以创建一个entity包 然后在下面去创建属性类 但这里 我们不想搞那么麻烦了 毕竟只是练习一下 然后 user参考代码如下 package…

初识 OPC

为什么需要OPC&#xff1f; 随着自动化的发展&#xff0c;工厂的自动化程度越来越高&#xff0c;面临着问题&#xff1a; 设备之间&#xff0c;设备与应用程序之间交互数据 不同产商设备/应用程序具有不同接口/通信协议&#xff0c;如何简单快速连接&#xff1f;采集的数据及…

mockjs学习笔记

文章目录 一、什么是mockjs二、安装mockj项目安装mock 三、mock语法生成字符串生成文本生成标题和句子生成段落生成数字生成自增id生成姓名-地址-身份证随机生成图片生成时间 mock拦截请求定义get请求定义post请求 四、实现新闻管理案例获取数据添加新闻删除新闻 一、什么是moc…

Request和Response应用

ServletRequest应用 ServletRequest应用非常广泛&#xff0c;下面是一些例子&#xff1a; 获取请求参数&#xff1a;可以使用HttpServletRequest的getParameter()方法获取请求参数。 获取请求头信息&#xff1a;可以使用HttpServletRequest的getHeader()方法获取请求头信息。…

Portapack应用开发教程(十八)NavTex接收 D

上回说到&#xff0c;我现在已经做到用自己的gnuradio流图从音频信号做fsk解调&#xff0c;得到方波。然后用c程序把方波转为二进制数。又用python把二进制数转为最终的字母。 但是遗留问题是python解码&#xff0c;起始位如果错误&#xff0c;解的信息是错的。另外&#xff0…

Blob File

文章目录 学习链接Blob创建演示 分片演示 Fileinput手动拖拽fetch 从后端获取流前端代码后端代码 window.showOpenFilePicker Filereader示例1示例2 ArrayBuffer创建bufferTypedArray读写bufferDataView读写buffer与Blob对比 Blob Url & DataUrl示例1示例2 学习链接 Blog …