Android 学习之《第一行代码》第二版 笔记(二十)播放多媒体文件

Android多媒体开发 Android多媒体开发系列文章 Android多媒体开发:录音机 Android多媒体开发:照相机 Android多媒体开发:第三方框架 一、什么是多媒体 多媒体(duō méi tǐ) 的英文单词是Multimedia,它由media和multi两部分组成。一般理解为多种媒体的综合 多媒体是计算机和视频技术的结合,实际上它是两个媒体;声音和图像,或者用现在的术语:音响和电视。 多媒体(Multi 阅读详情

通过点击按钮实现播放、暂停和关闭(重置)音频和视频

一、知识点

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. 效果图

播放多媒体文件1
播放多媒体文件2

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开发笔记之多媒体—VideoView播放视频 ——使用VideoView播放视频 效果:使用步骤:1)在布局文件中定义VideoView的组件2)调用setVideoPath(path)指定要播放的资源或者调用setVideoURI(Uri uri)加载uri对应的视频。3)调用VideoView中的start,stop,pause方法控制视频播放4)和MediaController类一起使用,它可以提供一个友好的图形控制界面, 阅读详情

相关推荐

【Android Studio】第一行代码-第8章 运用手机多媒体 音频视频

〇、前情提要 第一行代码Android第八章内容中播放音频和视频文件部分。 参考: 思维导图 https://www.zhihu.com/question/27596017/answer/37634740 【Android Studio】第一行代码-第8章 运用手机多媒体 通知 https://blog.youkuaiyun.com/weixin_43210113/article/details/109378946 【Android Studio】第一行代码-第8章 运用手机多媒体 图片 https://blog.c

weixin_43210113的博客 1198

第一行代码 第二版pdf及源码(分享)

这里写链接内容

qq_37832848的博客 6万+

播放多媒体文件(音频,视频)

在安卓上播放多媒体文件是非常常见的,听音乐,看电视等等,接下来,我们就通过一些例子来学习在手机上播放一个简易的音频和视频播放器。 播放音频 别的不多说,直接上代码吧! activity_main.xml代码 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://sche

weixin_46748537的博客 1454

第一行代码(第二版).pdf

Android 第一行代码(第2版) 下载地址:https://pan.baidu.com/s/1-lsdqIViw20fC566SV-XPQ 提取码:dhyx

dhhyx的博客 4789

Android第一行代码第二版简要总结

进入安卓的第一本书(简要概括) 第一章 了解大体Android 1.Android系统架构 Linux内核层:为Android设备的各种硬件提供了底层的驱动. 系统运行库层:通过c/c++库来提供主要特性支持(数据库,浏览器内核,3D绘图),Android运行时库,Dalvik虚拟机(ART运行环境). 应用框架层:提供所需要的各种API. 应用层:手机上的应用程序皆属于该层. 2.Android应用开发特色 四大组件:活动(Activity),服务(Service),广播接收器(Broadcast

qq_52141922的博客 961

Android多媒体播放器项目实战源码详解

本文还有配套的精品资源,点击获取 简介:本项目为基于Android的多媒体播放应用,涉及多媒体框架使用、用户界面设计、文件管理、音视频编解码技术、流媒体支持、权限管理、异步处理、服务与通知处理、事件监听及性能优化等关键知识点。通过源码分析,开发者可以全面掌握Android平台上的多媒体播放技术,并提升编程技能。 1. Android项目多媒体播放器概念解析 ...

weixin_33622085的博客 1535

Android 第一行代码(第二版)学习

android第一行笔记

Redamancylove的博客 1174

Android安卓开发 第一行源码(第二版)pdf百度网盘

Android安卓开发 第一行源码pdf百度网盘,第二版,ide是Androidstudio

【免费下载】 第一行代码 第二版 PDF 及源码分享

第一行代码 第二版 PDF 及源码分享 【下载地址】第一行代码第二版PDF及源码分享指南 本仓库提供《第一行代码 第二版》的 PDF 文件及源码下载。该资源旨在帮助 Android 开发者快速入门并深入学习 Android 应用开发 ...

gitblog_06557的博客 757

第一行Android代码(第二版)源码

第一行Android代码(第二版)所有源代码

音乐播放器--简单实现播放、暂停、随机播放、音乐进度条(第一版)

音乐播放器--简单实现播放、暂停、随机播放、音乐进度条。有侧滑菜单的实现,自定义Dialog的实现

Android Studio实现多媒体播放器,音乐视频一体化

这次的网络版音乐视频播放器是在前面讲到的音乐播放器项目(Android Studio如何实现音乐播放器)基础上,将音乐文件与项目文件独立开,放在服务器的文件夹里面进行访问,除此之外还添加了视频播放器功能。本次项目综合了Android几乎所有知识,可以让大家熟练掌握Android程序开发的基本技术,涉及Android 基础知识、UI界面、数据存储、四大组件、网络编程、高级编程、多媒体播放器、适配器配置等。大家熟练掌握可以对以后的Android开发有非常大的帮助。

振华OPPO的博客世界 3万+

一种导弹追踪算法的MATLAB仿真实现

以下是一个用于模拟机动变轨导弹和防空导弹追踪过程的 MATLAB 代码,同时会提供 3D 效果展示。你可以运行这段代码,从而观察机动变轨导弹和防空导弹的速度与位置变化。

SmartGridequation的博客 933

android 播放局域网共享多媒体文件

1.android 不支持直接访问局域网的共享文件,所以要用到其它的开源库,来实现文件的访问。 http://jcifs.samba.org/   jcifs 实现smb协议,关于smb协议,可以参考百度。   https://clinkc.svn.sourceforge.net/svnroot/cgupnpjava/trunk/   实现http服务器  http://common

qq1761310972 1万+

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

AI 赋能测试全生命周期:多 Agent 协同的自动化提效方案

本文提出了一种基于Coze平台的多Agent协同测试解决方案,旨在解决软件测试中PRD解析不清晰、测试点覆盖不全、用例编写效率低、代码生成耗时等痛点。通过PRD优化、测试点生成、测试用例生成和单元测试框架生成四个Agent的协同工作,结合Cursor工具实现从需求到代码的全链路自动化。以电商平台登录模块为例,展示了从模糊PRD到标准化测试用例和可执行Java单元测试代码的完整转化流程。该方案通过AI赋能显著提升测试效率,减少人工干预,实现测试覆盖率≥95%,为快速迭代的软件研发提供了高效的测试自动化支持。

QINJIEEE的博客 1101

安卓多媒体API——多媒体播放MediaPlayer

序 在画布与绘制的部分就已经学习了如何实现简易的视频播放、暂停、停止 https://blog.youkuaiyun.com/nishigesb123/article/details/89468251#t7 而这部分关于安卓中的多媒体播放,利用这部分知识,可以实现一个“真正”的媒体播放器。 媒体播放概述 Android的多媒体框架包括支持播放多种常见的媒体类型,使您可以轻松地把音频、视频和图像集成到...

旧日灯塔 2083

ADS2023实战:手把手教你用Load-Pull设计40W LDMOS功率放大器(附工程文件)

本文以飞思卡尔MRF8P9040N LDMOS晶体管为例,详细介绍了在ADS 2023中设计一款40W功率放大器(PA)的全流程。内容涵盖从直流偏置设置、稳定性分析、核心的负载牵引(Load-Pull)仿真,到基于Smith圆图的匹配网络设计、谐波平衡性能验证,直至版图生成与优化。文章提供了手把手的实战指导和工程文件,旨在帮助射频工程师掌握高效率PA的设计方法与关键技巧。

cake8的博客 1070

【安卓】播放多媒体文件

在app/src/main这个目录下右击app/src/main→New→Directory,新建assets目录,在这个目录下放入一个音频文件。然后修改MainActivity中的代码。新建一个目录来放视频文件,右击app/src/main/res→New→Directory,在弹出的对话框中输入“raw”,然后修改MainActivity中的代码。在Android中播放音频文件一般是使用MediaPlayer类实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使播放音乐的工作变得十分简单。

君子慎独,不欺暗室。卑以自牧,含章可贞。 1816

AD9361数字调制入门:从IQ调制原理到动手实现第一个ASK信号(Vivado工程详解)

本文详细介绍了如何使用AD9361射频收发器实现ASK数字调制,从IQ调制原理到Vivado工程实现。通过Verilog代码示例和FPGA架构设计,帮助开发者理解纯逻辑实现数字调制解调的关键技术,特别适合软件无线电(SDR)初学者入门实践。

weixin_29158047的博客 374

正弦波、方波、三角波和锯齿波信号发生器——Multisim电路仿真

调节方波信号的占空比,也就是改变输出信号的高低电平时间比例,可以设置电容不同的充放电时间来达到目的,RP2可以使得电容具有不同的充放电时间,其中二极管起到限制电流流向的作用。假设U+>U,那么输出端就达到正向饱和,电容开始充电,当电容电压大于同相输入端电压时,此时电容开始放电,由此往复,从而产生方波信号。3,正反馈支路占优势,电路开始起振并不是稳定的,振荡会不断增大,最终将导致运放饱和,输出的波形是削波失真的正弦波。通常在电路中引入负反馈,例如使用负温度系数的热敏电阻,以自动稳定增益,防止输出波形失真。

XU157303764的博客 5319

《第一行代码》第二版 学习总结结束篇

最近利用下班时间,找了看什么书比较适合初学android的朋友,很多人推荐了《第一行代码》这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。 最近一段时间,项目的工作有点紧急,而且还需要不断的出差,所以很多的学习安排...

hfut_why的博客 1728

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 757

《第一行代码》第二版 学习总结19 播放本地音频和视频

最近利用下班时间,找了看什么书比较适合初学android的朋友,很多人推荐了这本书,于是就买了一本,感觉看书,思考,动手,再思考和总结这样过程还是很有必要的,于是就打算把自己学习的东西简单的总结一下;方便自己以后查找,也有利于学习的巩固。在这里首先要感谢一下书籍的作者——郭霖前辈。 上一篇中我们介绍了如何调用手机的摄像头与打开手机相册,本篇主要讲解一下如何播放本地的音频和...

hfut_why的博客 2672

手机端实时检测:YOLOv8n轻量化改进,骁龙865上35FPS,mAP+3.2%

YOLOv8n-Lite的改进不是简单的“砍通道、降分辨率”,而是结合手机端硬件特性(NPU加速、内存限制)和场景需求(小目标检测),通过“卷积拆分减少计算、通道瘦身适配内存、特征强化保留精度”的协同策略,在骁龙865上实现35FPS实时性与mAP+3.2%的双赢。该方案已在手机端AR应用中落地,支持实时手势识别、物体测量等功能,功耗比原始模型降低40%(连续检测1小时仅耗电12%)。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 723

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

安卓播放多媒体文件

package com.example.playaudiotest; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.Manifest; import android.content.p

weixin_43268298的博客 248

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: Android 学习之《第一行代码》第二版 笔记(十九)从相册中选取图片
下一篇: Android 学习之那些年我们遇到的BUG4:Error:(46, 38) 错误: 不兼容的类型: MainActivity无法转换为OnClickListener
Nicholas_hzf
博客等级 码龄9年 107粉丝 79原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值