【安卓】播放多媒体文件

server/2024/9/22 18:25:27/

文章目录

      • 播放音频
      • 播放视频

播放音频

  在Android中播放音频文件一般是使用MediaPlayer类实现的,它对多种格式的音频文件提供了非常全面的控制方法,从而使播放音乐的工作变得十分简单。

  MediaPlayer类中常用的控制方法。

常用方法名描述
setDataSource()设置要播放的音频文件的位置
prepare()在开始播放之前调用,以完成准备工作
start()开始或继续播放音频
pause()暂停播放音频
reset()将MediaPlayer对象重置到刚刚创建的状态
seekTo从指定的位置开始播放音频
stop()停止播放音频。
release()释放与MediaPlayer对象相关的资源
isPlaying()判断当前MediaPlayer是否正在播放音频
getDuration()获取载入的音频文件的时长

  新建一个PlayAudioTest项目,然后修改activity_main.xml中的代码。放置3个按钮,分别用于对音频文件进行播放、暂停和停止操作。

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

  在app/src/main这个目录下右击app/src/main→New→Directory,新建assets目录,在这个目录下放入一个音频文件。然后修改MainActivity中的代码。

java">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, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);} else {initMeidaPlayer(); // 初始化MediaPlayer}}// 初始化MediaPlayerprivate void initMeidaPlayer() {try {AssetFileDescriptor fd = getAssets().openFd("music.mp3");mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());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) {initMeidaPlayer();} else {Toast.makeText(this, "拒绝权限将无法使用程序", Toast.LENGTH_SHORT).show();finish();}break;default:break;}}@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(); // 停止播放initMeidaPlayer();}break;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.release();}}
}

  最后在AndroidManifest.xml文件中申请权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在这里插入图片描述

播放视频

  播放视频文件其实并不比播放音频文件复杂,主要是使用VideoView类来实现的。这个类将视频的显示和控制集于一身,VideoView的用法和MediaPlayer也比较类似。

常用方法名描述
setVideoPath()设置要播放的视频文件的位置
start()开始或继续播放视频
pause()暂停播放视频
resume()将视频从头开始播放
seekTo从指定的位置开始播放视频
isPlaying()判断当前是否正在播放视频
getDuration()获取载入的视频文件的时长
suspend()释放ViedoView所占用的资源

  新建PlayVideoTest项目,然后修改activity_main.xml中的代码。放置三个按钮,分别用于控制视频的播放、暂停和重新播放。然后再放置一个VideoView用于显示视频。

<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/videoView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

  新建一个目录来放视频文件,右击app/src/main/res→New→Directory,在弹出的对话框中输入“raw”,然后修改MainActivity中的代码。

java">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.videoView);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, android.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() {Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);videoView.setVideoURI(uri);}@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:break;}}@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;default:break;}}@Overrideprotected void onDestroy() {super.onDestroy();if (videoView != null) {videoView.suspend();}}
}

在这里插入图片描述


http://www.ppmy.cn/server/101650.html

相关文章

《ImageNet: A Large-Scale Hierarchical Image Database》李飞飞论文阅读笔记

OpenSNN开思通智网&#xff0c;官网地址&#xff1a;https://w3.opensnn.com/ 2024年8月份 “O站创作者招募计划” 快来O站写文章&#xff0c;千元大奖等你来拿&#xff01; “一起来O站&#xff0c;玩转AGI&#xff01;” 论文地址: 《ImageNet: A Large-Scale Hierarchical I…

Ruby模板引擎:构建动态视图的艺术

标题&#xff1a;Ruby模板引擎&#xff1a;构建动态视图的艺术 在Ruby on Rails的世界里&#xff0c;模板引擎是构建动态网页的基石。它们允许开发者将服务器端的逻辑嵌入到HTML中&#xff0c;实现数据的动态展示。本文将深入探讨Ruby中几种常用的模板引擎&#xff0c;包括ERB…

智能安全守护,寺庙安全用电解决方案

在四川省蓬溪县城北&#xff0c;高峰山以其千年的历史沉淀和独特的文化风貌&#xff0c;默默诉说着道教与佛教交融的传奇。然而&#xff0c;2017年5月31日凌晨的一声巨响&#xff0c;打破了这里的宁静&#xff0c;一场突如其来的大火&#xff0c;让这座承载着无数信徒信仰与梦想…

09-JavaScript(代码)

01-二级导航 <style>* {margin: 0;padding: 0;list-style: none;}ul {width: 500px;height: 30px;margin: 30px auto;position: relative;}li {width: 100px;height: 30px;border: 1px solid #000;text-align: center;line-height: 30px;box-sizing: border-box;float: …

从概念到现实:手机设计可视化如何重塑科技美学

在这个日新月异的数字时代&#xff0c;手机已不仅仅是通讯工具&#xff0c;它更是我们生活方式的延伸&#xff0c;是连接世界的窗口&#xff0c;是创意与科技的完美结晶。 想象一下&#xff0c;在浩瀚的数字海洋中&#xff0c;一款尚未面世的手机&#xff0c;通过高精度的3D建模…

换毛季猫咪掉毛严重怎么办?好用的清理工具——宠物空气净化器

养宠之前只是听说过猫咪有换毛季这件事&#xff0c;到了我自己养猫&#xff0c;梳一次终于直观感受到到底能掉多少毛。完全是可以温暖一整个夏天的量&#xff0c;真的很惊讶可以掉这么多毛&#xff0c;这还不包括身上那么多摇摇欲坠快要的毛。每次梳完毛&#xff0c;感觉猫都瘦…

开源免费的表单收集系统TDuck

TDuck&#xff08;填鸭表单&#xff09;是一款开源免费的表单收集系统&#xff0c;它基于Apache 2.0协议开源&#xff0c;用户可以随时下载源码&#xff0c;自由修改和定制&#xff0c;也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署&#xff0c;还提供了丰…

java之UDP的发送数据和接收数据

public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//创建Datagramsocket对象&#xff08;快递公司&#xff09;//细节&#xff1a;//绑定端口&#xff0c;以后我们就是通过这个端口往外发送//空参&#xff1a;所有可用的端…