Android 播放raw文件夹下音频文件,本地MP3文件播放,播放云端MP3文件,获取MP3文件播放时长

1、复制音频文件到raw文件夹下

 

2、实例化音频文件

 

private final MediaPlayer.OnCompletionListener beepListener = new MediaPlayer.OnCompletionListener() { // 声音public void onCompletion(MediaPlayer mediaPlayer) {mediaPlayer.seekTo(0);}
};
private static final float BEEP_VOLUME = 9.10f;
private MediaPlayer mediaPlayer;
private void initBeepSound() {if ( mediaPlayer == null) {// The volume on STREAM_SYSTEM is not adjustable, and users found it// too loud,// so we now play on the music stream.mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setOnCompletionListener(beepListener);AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.sou);try {mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());file.close();mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);mediaPlayer.prepare();} catch (IOException e) {mediaPlayer = null;}}
}

 

3、开始播放

mediaPlayer.start();

 

2、播放云端MP3文件

 1、添加音频播放器依赖

//exoplayer播放器
implementation 'com.google.android.exoplayer:exoplayer:2.8.4'
// 视频缓存
implementation 'com.danikula:videocache:2.7.0'
implementation 'org.greenrobot:greendao:3.2.2'

 2、播放云端MP3——文件链接

 

PlayerView mExoPlay;
private SimpleExoPlayerHelper mMySimpleExoPlayer;private List<String> mVideoSourseList = new ArrayList<>();

 

btn_downMP3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String vds = "https://gzlxcdg.https.xiaozhuschool.com/public/uploads/video/20200504/fa530b8ae53f8d2e7698ea0fb22d22d5.mp4";String urlStr = "http://zsxyylsb.app.xiaozhuschool.com/public/uploads/imgs/20200902/b04b350875d486b6957973bf7ea56dfc.mp3";if (!mVideoSourseList.isEmpty()) {mVideoSourseList.clear();}mVideoSourseList.add(urlStr);mVideoSourseList.add(vds);mMySimpleExoPlayer.prepare(mVideoSourseList);mMySimpleExoPlayer.setRepeatMode(SimpleExoPlayerHelper.RepeatMode.REPEAT_MODE_OFF);mMySimpleExoPlayer.start();//播放云MP3}
});

3、播文件夹里面的MP3文件 

 

MediaPlayer medPlay;
medPlay=MediaPlayer.create(this,Uri.parse("/storage/emulated/0/data/cn.dlc.xiaoyao/msc1/海洋第一集.mp3"));

开始

medPlay.start();

暂停

medPlay.pause();

重新开始

medPlay.stop();
medPlay=MediaPlayer.create(MainActivity.this,Uri.parse("/storage/emulated/0/data/cn.dlc.xiaoyao/msc1/海洋第二集.mp3"));medPlay.start();

 4、获取MP3文件播放时长

 

public long getAudioFileVoiceTime(String filePath) {long mediaPlayerDuration = 0L;if (filePath == null || filePath.isEmpty()) {return 0;}MediaPlayer mediaPlayer = new MediaPlayer();try {mediaPlayer.setDataSource(filePath);mediaPlayer.prepare();mediaPlayerDuration = mediaPlayer.getDuration();} catch (IOException ioException) {LogPlus.i("lgq", ioException.getMessage());}if (mediaPlayer != null) {mediaPlayer.stop();mediaPlayer.reset();mediaPlayer.release();}return mediaPlayerDuration;
}

时长转为分钟,秒数显示

 

int fz = (int)(getAudioFileVoiceTime(files[i].getPath())/1000)/60;
LogPlus.d("lgq==fz ==="+fz+"。。。。余数==="+(getAudioFileVoiceTime(files[i].getPath())/1000)%60);

实现demo: https://download.csdn.net/download/meixi_android/12821205

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

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

相关文章

前端学习(2691):重读vue电商网站12之获取选中节点的keys:

首先&#xff0c;给我们对话框的确定按钮绑定一个事件。 主要使用 tree 组件提供的两个方法 getCheckedKeys 和 getHalfCheckedKeys来分别返回目前被选中的节点的 key 所组成的数组和目前半选中的节点的 key 所组成的数组

cmd 【已解决】windows连接手机,运行adb devices提示“unauthorized”

报错截图如下&#xff1a; 问题原因&#xff1a;电脑连接手机。手机未授权 解决方式&#xff1a; 设置----开发者选项-----打开USB调试&#xff0c;出现如下弹框&#xff0c;点击“确定”即可解决问题。 转载于:https://www.cnblogs.com/syw20170419/p/8280291.html

Android 可开关式顶部下拉view

效果&#xff1a; 实现方法 1、layout文件结构 最外部使用相对布局 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.c…

emit传参,获取返回值

我的需求&#xff0c;子应用调用主应用方法&#xff0c;主应用返回参数。 主应用&#xff1a; methods:{ getToken(callback) {callback(this.$store.state.user.auth)}, }, mounted(){this.$bus.on(getToken, this.getToken) }子应用&#xff1a; mounted(){ this.$qkBus.e…

前端学习(2692):重读vue电商网站13之使用动态编辑标签

实现效果如下&#xff1a; 通过 v-if 的 boolean值来动态变化是否显示文本框还是 button 按钮。通过 v-model 双向绑定来实现文本框内容的监听。 由于每一行需要设置文本框的显示与隐藏&#xff0c;而且数据是共享的。我们需要通过 scope来获取每一行的值来进行绑定&#xff0…

C++ 宏、范型和RTTI 浅析

【摘要】 RTTI(Run-Time Type Identification)是面向对象程序设计中一种重要的技术。现行的C标准对RTTI已经有了明白的支持。只是在某些情况下出于特殊的开发须要&#xff0c;我们须要自己编码来实现。本文介绍了一些关于RTTI的基础知识及其原理和实现&#xff0c;并分析…

宝塔面板解决跨域

1、找到宝塔面板配置nginx文件的地方 2、增加如下代码 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods POST,PUT,GET,DELETE; add_header Access-Control-Allow-Headers version, access-token, user-token, Accept, apiAuth, User-Agent…

Android 底部上拉抽屉view

module链接&#xff1a;https://download.csdn.net/download/meixi_android/10839835 接入module方法&#xff1a;https://blog.csdn.net/meixi_android/article/details/84655666 1、activity实现步骤 layout文件布局——DrawerLayoutContent_ID是抽屉内容id&#xff0c;dra…

前端学习(2693):重读vue电商网站14之步骤条的使用与美化

以下就是步骤条使用的核心代码&#xff0c;其中 active 绑定的是每一个 step 的下标&#xff0c;默认从 0 开始。其次&#xff0c;我们可以设置 aligin-center 属性来让我们的步骤条进行居中。el-step就是每一个步骤进度。 Javascript <!-- 步骤条区域 --> <el-steps…

启动项目时,运行其他方法

最近转学java&#xff0c;记录点滴 Component public class Test implements ApplicationRunner {Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("1234");} }主要是继承ApplicationRunner,并实现run方法

BOM--window对象

BOM 的核心对象是window&#xff0c;它表示浏览器的一个实例。在浏览器中&#xff0c;window 对象有双重角色&#xff0c;它既是通过JavaScript 访问浏览器窗口的一个接口&#xff0c;又是ECMAScript 规定的Global 对象。这意味着在网页中定义的任何一个对象、变量和函数&#…

Android 固定式底部上滑抽屉view

1、自定义view BottomDrawerLayout /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;15913707499163.com* 日期&#xff1a;2018/12/10 11*/public class BottomDrawerLayout extends ViewGroup {private static final String TAG "BottomDrawerLayout";p…

前端学习(2694):重读vue电商网站15之阻止页签tabs切换

主要函数如下&#xff1a; 在我们的 tabs 标签页添加一个 before-leave 函数 然后在 methods 中定义&#xff0c;根据第一个标签页的逻辑来阻止标签页的切换。

vscode中vue3项目vetur报错

vue3支持的插件应该是volar&#xff0c;之前有老的vue2项目插件vetur&#xff0c;所以会报错。 解决办法&#xff1a;在项目中新建.vscode, 新建文件settings.json,里面内容如下&#xff1a; {"vetur.validation.template": false,"vetur.validation.script&qu…

Android 侧滑多层view显示

侧滑module链接&#xff1a;https://download.csdn.net/download/meixi_android/10840271 引用方法 只需layout布局文件引用即可——第一个LinearLayout是底层view&#xff0c;第二个LinearLayout是上层view&#xff0c;侧滑即可显示底层view <com.daimajia.swipe.SwipeL…

MySQL的btree索引和hash索引的区别

MySQL的btree索引和hash索引的区别ash 索引结构的特殊性&#xff0c;其检索效率非常高&#xff0c;索引的检索可以一次定位&#xff0c;不像B-Tree 索引需要从根节点到枝节点&#xff0c;最后才能访问到页节点这样多次的IO访问&#xff0c;所以 Hash 索引的查询效率要远高于 B-…

vue2 vite antd vue 配置组件按需加载

1、安装vite-plugin-importer 2、配置vite.config.ts文件 import { fileURLToPath, URL } from url import { defineConfig } from vite import vue from vitejs/plugin-vue import vueJsx from vitejs/plugin-vue-jsx import usePluginImport from vite-plugin-importerexpo…

Android QQ登录集成

1、首先到腾讯开放平台创建应用&#xff0c;并上线——使用有效APP ID才可以进行qq登录 腾讯开放平台&#xff1a;https://open.tencent.com/ 上线后APP ID 2、下载腾讯sdk&#xff1a;https://download.csdn.net/download/meixi_android/10842092 3、activity代码详情&#…

前端学习(2695):重读vue电商网站16之Upload 上传组件

通过点击或者拖拽上传文件 Js <!-- action表示图片上传后台api地址 --> <el-upload:action"uploadURL":on-preview"handlePreview":on-remove"handleRemove"list-type"picture" ><el-button size"small" typ…