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万+

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

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

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

qq1761310972 1万+

机器学习---xgboost算法

问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。

weixin_43961909的博客 1万+

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9003

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

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

旧日灯塔 2083

RAG系统中Embedding模型选型实战

本文详细介绍了RAG系统中Embedding模型选型实战,希望能对学习RAG的同学们有所帮助。 文章目录 1. 前言 2. 思路解析 3. 测评数据集构建 3.1 步骤一 3.2 步骤二 3.3 数据示例 3.4 总结 4. 实战代码 4.1 本地模型 4.2 使用第三方的Embedding模型API

herosunly的博客 17万+

【安卓】播放多媒体文件

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

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

【PCIe硬件】PCIe引脚PRSNT与热插拔

热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。

smartvxworks的博客 2804

PCB高速信号换层孔新技术:VECS(Vertical Conductive Structure Technology)解析

摘要:垂直导电结构(VeCS)是一种新型PCB互连技术,由平板信号走线和椭圆形接地层构成半同轴结构,相比传统过孔具有显著优势。通过全波仿真和实测验证,VeCS展现出更好的阻抗连续性、更低的插入损耗和回波损耗,以及优异的串扰抑制能力。其椭圆形接地结构能有效隔离电磁干扰,在相同布线密度下远端串扰比传统过孔降低约50%。VeCS制备工艺与传统PCB工艺兼容,无需新增设备,且能实现更高密度互连。测试结果显示,2.5英寸带状线通道中VeCS结构的信号完整性表现明显优于传统过孔,为高速数字系统提供了更可靠的垂直互连解决

小孟同学的博客 199

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

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

hfut_why的博客 1728

『OPEN3D』1.2 mesh处理 python篇

介绍open3d对mesh的基本处理操作

NNNNNathan的博客 4648

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

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

hfut_why的博客 2672

HyperLynx仿真(一)LineSim简单介绍

可以选择设置信号线与信号线之间默认的距离和信号线与同平面的平面之间的距离,这些设置根据工程师项目上经常使用的情况而设置,也可以选择不设置,在每次仿真时根据需要再对每一个仿真单独设置。仿真属性的设置对话框包含一般设置、 显示颜色设置、LineSim 设置、BoardSim 设置、 层叠默认设置、焊盘类型设置、仿真示波器默认设置、电路仿真器默认设置、电源完整性设置及高级设置。第一次使用HyperLynx软件时需要设置仿真相关环境,包括仿真软件的基本设置、模型库路径设置、仿真控制器控制、单位等。...

小幽余生不加糖 8948

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

安卓播放多媒体文件

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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 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、付费专栏及课程。

余额充值