【android开发-22】android中音频和视频用法详解

1,播放音频

MediaPlayer是Android中用于播放音频和视频的类。它提供了许多方法来控制播放,例如播放、暂停、停止、释放等。下面是一个简单的MediaPlayer用法详解和参考代码例子。

首先,确保在布局文件中添加了一个MediaPlayer控件,例如:

<mediaplayer  android:id="@+id/media_player"  android:layout_width="wrap_content"  android:layout_height="wrap_content" />

然后,在Java代码中初始化MediaPlayer对象,并设置音频或视频源:

MediaPlayer mediaPlayer = new MediaPlayer();  
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);  
mediaPlayer.setDataSource(audioFilePath); // audioFilePath是音频文件路径  
mediaPlayer.prepare();  
mediaPlayer.start(); // 开始播放

如果要播放视频,可以使用类似的方法,只需将音频源更改为视频源即可。

在播放过程中,可以使用MediaPlayer对象的方法来控制播放,例如:

pause():暂停播放
start():开始播放
stop():停止播放
reset():重置播放器,清除所有状态和数据源
release():释放资源,结束播放器
seekTo():跳转到指定位置(以毫秒为单位)
getCurrentPosition():获取当前播放位置(以毫秒为单位)
getDuration():获取音频或视频总时长(以毫秒为单位)
isPlaying():判断是否正在播放音频或视频
getAudioSessionId():获取音频会话ID,用于与AudioTrack、AudioRecord等音频会话进行区分和管理。

例如,要在播放过程中暂停音频,可以使用以下代码:

if (mediaPlayer.isPlaying()) {  mediaPlayer.pause();  
}

要恢复播放,可以使用以下代码:

if (!mediaPlayer.isPlaying()) {  mediaPlayer.start();  
}

完整的使用代码:

import android.media.MediaPlayer;  
import android.os.Bundle;  
import androidx.appcompat.app.AppCompatActivity;  
import android.view.View;  
import android.widget.Button;  public class MediaPlayerActivity extends AppCompatActivity {  private MediaPlayer mediaPlayer;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  // 获取MediaPlayer控件和按钮对象  Button playButton = findViewById(R.id.play_button);  Button stopButton = findViewById(R.id.stop_button);  // 设置按钮点击事件监听器  playButton.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  if (mediaPlayer == null) {  mediaPlayer = MediaPlayer.create(MediaPlayerActivity.this, R.raw.music_file); // 设置音频文件路径,可以从资源文件中读取或从文件中直接读取  mediaPlayer.start(); // 开始播放音频  } else {  mediaPlayer.start(); // 继续播放音频  }  }  });  stopButton.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  if (mediaPlayer != null) { // 如果MediaPlayer对象不为空,则停止播放音频并释放资源  mediaPlayer.stop(); // 停止播放音频  mediaPlayer.release(); // 释放资源,以便再次使用MediaPlayer时重新设置数据源和回调接口等参数  mediaPlayer = null; // 将MediaPlayer对象置为空,以便再次使用时重新创建对象并设置数据源和回调接口等参数  } else { // 如果MediaPlayer对象为空,则不执行任何操作,保持当前状态不变。如果需要再次播放音频,可以再次调用playButton的点击事件来创建并启动MediaPlayer对象。

2,播放视频

以下是一个简单的Android VideoView示例,它显示了如何使用VideoView播放一个视频文件。

首先,在布局文件(例如:activity_main.xml)中添加VideoView控件:

<VideoView  android:id="@+id/videoView"  android:layout_width="match_parent"  android:layout_height="match_parent" />

然后在对应的Activity中初始化VideoView并设置视频路径:

import android.os.Bundle;  
import androidx.appcompat.app.AppCompatActivity;  public class MainActivity extends AppCompatActivity {  private VideoView videoView;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  videoView = findViewById(R.id.videoView);  videoView.setVideoURI(Uri.parse("path/to/your/video.mp4")); // 设置视频路径,可以从资源文件中读取或从文件中直接读取  videoView.start(); // 开始播放视频  }  
}

这个例子中的"path/to/your/video.mp4"需要替换为你的视频文件的实际路径。如果你的视频文件在资源文件夹的raw目录下,你可以像这样设置:videoView.setVideoURI(Uri.parse(“android.resource://your.package.name/” + R.raw.your_video))。记住,你需要将"your_video"替换为你的视频文件名(不包含扩展名)。

注意,这是一个非常基础的例子。在实际使用中,你可能需要处理更多的情况,例如错误处理、视频播放的控制(暂停、继续、停止等),以及适应不同的屏幕尺寸和分辨率。

VideoView和MediaPlayer的用法非常相似,主要有以下常用方法:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/212770.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何进行代码混淆?方法与常见工具介绍

​ 如何进行代码混淆&#xff1f;方法与常见工具介绍 目录 什么是代码混淆&#xff1f; 代码混淆的方法 常见代码混淆工具 什么是代码混淆&#xff1f; 代码混淆是指将计算机程序的代码转换成一种功能上等价&#xff0c;但难于阅读和理解的形式的行为。混淆后的代码很难被…

探究Logistic回归:用数学解释分类问题

文章目录 前言回归和分类Logistic回归线性回归Sigmoid函数把回归变成分类Logistic回归算法的数学推导Sigmoid函数与其他激活函数的比较 Logistic回归实例1. 数据预处理2. 模型定义3. 训练模型4. 结果可视化 结语 前言 当谈论当论及机器学习中的回归和分类问题时&#xff0c;很…

cpu 300% 爆满 内存占用不高 排查

top查询 cpu最高的PID ps -ef | grep PID 查看具体哪一个jar服务 jstack -l PID > ./jstack.log 下载/打印进程的线程栈信息 可以加信息简单分析 或进一步 查看堆内存使用情况 jmap -heap Java进程id jstack.log 信息示例 Full thread dump Java HotSpot(TM) 64-Bit Se…

MQTT 协议入门:轻松上手,快速掌握核心要点

文章目录 什么是 MQTT&#xff1f;MQTT 的工作原理MQTT 客户端MQTT Broker发布-订阅模式主题QoS MQTT 的工作流程开始使用 MQTT&#xff1a;快速教程准备 MQTT Broker准备 MQTT 客户端创建 MQTT 连接通过通配符订阅主题发布 MQTT 消息MQTT 功能演示保留消息Clean Session遗嘱消…

【广州华锐互动VRAR】VR戒毒科普宣传系统有效提高戒毒成功率

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活带来了前所未有的便利。在教育科普领域&#xff0c;VR技术的应用也日益广泛&#xff0c;本文将详细介绍广州华锐互动开发的VR戒毒科普宣传系统&#xff0…

长沙电信大楼火灾调查报告发布:系烟头引发。FIS来护航安全

近日&#xff0c;长沙电信大楼的火灾调查报告引起广泛关注。调查发现&#xff0c;火灾是由未熄灭的烟头引发&#xff0c;烟头点燃了室外平台的易燃物&#xff0c;迅速蔓延至整个建筑。这起悲剧再次提醒我们&#xff0c;小小的疏忽可能酿成大灾难。但如果我们能及时发现并处理这…

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

目录 Linux 内核最新版本动态 关于成为内核维护者 代码好写&#xff0c;人际关系难处理 内核维护者老龄化 内核中 Rust 的使用 关于 AI 的看法 参考 12.5-12.6 日&#xff0c;Linux 基金会组织的开源峰会&#xff08;OSS&#xff0c;Open Source Summit&#xff09;在日…

java设计模式学习之【适配器模式】

文章目录 引言适配器模式简介定义与用途&#xff1a;实现方式&#xff1a;类型 使用场景优势与劣势适配器模式在Spring中的应用多媒体播放器示例代码地址 引言 在我们的日常生活中&#xff0c;适配器无处不在&#xff1a;无论是将不同国家的插头转换成本地标准&#xff0c;还是…

JavaSE基础50题:11. 输出一个整数的每一位

概述 输出一个整数的每一位。 如&#xff1a;1234的每一位是4&#xff0c;3&#xff0c;2&#xff0c;1 。 个位&#xff1a;1234 % 10 4 十位&#xff1a;1234 / 10 123 123 % 10 3 百位&#xff1a;123 / 10 12 12 % 10 2 千位&#xff1a; 12 / 10 1 代码 ublic sta…

yolo目标检测+目标跟踪+车辆计数+车辆分割+车道线变更检测+速度估计

这个项目使用YOLO进行车辆检测&#xff0c;使用SORT&#xff08;简单在线实时跟踪器&#xff09;进行车辆跟踪。该项目实现了以下任务&#xff1a; 车辆计数车道分割车道变更检测速度估计将所有这些详细信息转储到CSV文件中 车辆计数是指在道路上安装相应设备&#xff0c;通过…

Linux文件部分知识

目录 认识inode 如何理解创建一个空文件&#xff1f; 如何理解对文件写入信息&#xff1f; 如何理解删除一个文件&#xff1f; 为什么拷贝文件的时候很慢&#xff0c;而删除文件的时候很快&#xff1f; 如何理解目录 ​编辑 文件的三个时间 ​编辑 Access&#xff1a; …

【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

超大规模集成电路设计----FPGA时序模型及FSM的设计(八)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----RTL级设计之FSM&#xff08;八&#xff09; 7.1 CPLD的时序模型7.1.1 XPLA3 时序模型7.1.…

电话卡Giffgaff激活

Giffgaff是一家总部位于英国的移动电话公司。作为一家移动虚拟网络电信运营商&#xff0c;Giffgaff使用O2的网络&#xff0c;是O2的全资子公司&#xff0c;成立于2009年11月25日。 Giffgaff与传统的移动电话运营商不同&#xff0c;区别在于其用户也可以参与公司的部分运营&…

鸿蒙原生应用开发——分布式数据对象

01、什么是分布式数据对象 在可信组网环境下&#xff0c;多个相互组网认证的设备将各自创建的对象加入同一个 sessionId&#xff0c;使得加入的多个数据对象之间可以同步数据&#xff0c;也就是说&#xff0c;当某一数据对象属性发生变更时&#xff0c;其他数据对象会检测到这…

Theamleaf导出pdf模版编写(原始th/td编写表格)

需求&#xff1a;简单的theamleaf编写表格就是简单的th/td&#xff0c;新需求是导出的模版是学员table表&#xff0c;每个项目的学员数量是不定的&#xff0c;所以用到 <tr th:each"item,start:${studentList}"> 所有代码&#xff1a; <!DOCTYPE html>…

离线数仓构建案例一

数据采集 日志数据&#xff08;文件&#xff09;到Kafka 自己写个程序模拟一些用户的行为数据&#xff0c;这些数据存在一个文件夹中。 接着使用flume监控采集这些文件&#xff0c;然后发送给kafka中待消费。 1、flume采集配置文件 监控文件将数据发给kafka的flume配置文件…

GateWay的路由与全局过滤器

1.断言工厂 我们在配置文件中写的断言规则只是字符串&#xff0c;这些字符串会被Predicate Factory读取并处理&#xff0c;转变为路由判断的条件 例如Path/user/**是按照路径匹配&#xff0c;这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePr…

Linux查看命令的绝对路径

linux查看命令的绝对路径 在Linux中&#xff0c;可以使用以下命令来查看命令的绝对路径&#xff1a; 1、which 命令名 例如&#xff0c;要查看chronyc命令的绝对路径&#xff0c;可以运行&#xff1a; which chronyc 2、whereis 命令名 例如&#xff0c;要查看chronyc命令…

thinkphp lists todo

来由&#xff1a; 数据库的这个字段我想返回成&#xff1a; 新奇的写法如下&#xff1a; 逻辑层的代码&#xff1a; public function goodsDetail($goodId){$detail $this->good->where(id, $goodId)->hidden([type_params,user_id])->find();if (!$detail) {ret…