本代码为教学材料,仅作学习使用,分析在注释里。
采用读取 SD 或者其他路径下的方式播放音乐文件。

AndoirdManifest.xml 配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.examplemp3">
// 获取读写内部存储器的权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

MP3Player.java

package com.example.player;import android.content.Context;
import android.media.MediaPlayer;
import android.os.Environment;
import android.widget.Toast;import com.example.examplemp3.MainActivity;import java.io.IOException;public class MP3Player {private MediaPlayer mp;private String path;private int length;public MP3Player(Context ctx) {mp = new MediaPlayer();// 获取内部存储器绝对路径path = Environment.getExternalStorageDirectory().getAbsolutePath();Toast.makeText(ctx, path, Toast.LENGTH_LONG).show();}public int getPosition() {// 获取当前位置return mp.getCurrentPosition();}public int getLength() {return length;}public void init(String fileName) {path = path + "/" + fileName;try {// 存储在SD卡或其他文件路径下的媒体文件mp.setDataSource(path);// 音乐文件准备mp.prepare();// 音乐文件长度length = mp.getDuration();} catch (IOException e) {e.printStackTrace();}}public void play() {mp.start();}public void pause() {mp.pause();}public void stop() {mp.stop();}public void destroy() {mp.release();}}

MainActivity.java

package com.example.examplemp3;import android.annotation.TargetApi;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;import com.example.player.MP3Player;import java.util.Timer;
import java.util.TimerTask;public class MainActivity extends AppCompatActivity {private Button btnPlay;private Button btnPause;private Button btnStop;private SeekBar sk;private MP3Player mp3Player;@TargetApi(Build.VERSION_CODES.M)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String[] permission = {"android.permission.READ_EXTERNAL_STORAGE"};// 获取动态权限this.requestPermissions(permission, 0);mp3Player = new MP3Player(MainActivity.this);mp3Player.init("exodus.mp3");btnPlay = (Button)findViewById(R.id.button);btnPause = (Button)findViewById(R.id.button2);btnStop = (Button)findViewById(R.id.button3);sk = (SeekBar)findViewById(R.id.seekBar);// 设置播放条最大长度sk.setMax(mp3Player.getLength());btnPlay.setOnClickListener(playerOnClickListener);btnPause.setOnClickListener(playerOnClickListener);btnStop.setOnClickListener(playerOnClickListener);// 计时器Timer timer = new Timer();TimerTask timerTask = new TimerTask() {@Overridepublic void run() {// 设置当前播放条位置sk.setProgress(mp3Player.getPosition());}};timer.schedule(timerTask, 0 , 10);}public View.OnClickListener playerOnClickListener = new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (view.getId()) {default:break;case R.id.button:mp3Player.play();break;case R.id.button2:mp3Player.pause();break;case R.id.button3:mp3Player.stop();break;}}};
}

Android 下简单的 MP3 播放(代码分析)相关推荐

  1. HTML中简单的声音语音MP3播放代码

    HTML中简单的声音语音MP3播放代码 在网页中播放MP3 语音播放代码 各浏览器默认支持的音频格式 在网页中播放MP3 我们有时候需要在网页里播放一段提示声音,如何通过几行代码就能实现在网页中播放各 ...

  2. android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...

    Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...

  3. php怎么控制mp3播放器,【更新2018/12/07】简单的MP3播放器

    本帖最后由 kumamiko 于 2018-12-7 11:02 编辑 snipaste_20181113_122405.png (63.66 KB, 下载次数: 0) 2018-11-13 12:3 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  5. GStreamer 编写一个简单的MP3播放器

    本文介绍如何使用GStreamer 编写一个简单的MP3播放器. 1,需要使用mad解码插件,因此需要先安装gstreamer0.10-plugins-ugly 2,编写mp3播放器 下面来看看如何利 ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

最新文章

  1. 6-5-树的双亲表示法-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...
  2. 推荐系统中基于深度学习的混合协同过滤模型
  3. 【算法学习笔记】57. 前缀树 字典序优化技巧 STL学习 SJTU OJ 1366 前缀匹配
  4. 排错-Loadrunner录制打不开浏览器解决方法
  5. DataAdapter对象
  6. 华为app安装失败与已安装签名_手机APP为什么总是安装失败
  7. 计算机平面设计专业有哪些课程,计算机平面设计专业课程有哪些?
  8. Atom飞行手册翻译: 3.4 文本处理包
  9. python调试_Python 调试
  10. IBM HMC V7R740虚拟机安装实战
  11. rm: cannot remove `.user.ini‘: Operation not permitted异常该如何解决?
  12. STM32固件库下载步骤
  13. 图解三层交换机:局域网都用它来组网
  14. 基于Android studio开发的图灵智能聊天机器人
  15. 贴片物料/电容/电阻的英制与公制封装
  16. 火狐浏览器的下载安装
  17. 地理空间框架(二):大地水准面、似大地水准面、参考椭球面
  18. Appops权限管理
  19. 小区数字IP广播系统
  20. 嵌入式软件是怎么分类的?

热门文章

  1. 我所经历的一次Dubbo服务雪崩,这是一个漫长的故事
  2. vscode 实现在行尾加分号
  3. c语言程序三角形实验报告,C语言程序设计实验报告(6)
  4. 国际化 i18n ———— 国家语言代码
  5. 小程序setdata优化_关于小程序setData的写法,如何减少setData次数?优化程序性能...
  6. Chatgpt如此博学,他有老师吗
  7. rtf格式的一些说明,转载的,我找到的rtf资料中比较实用的一片文章了
  8. 如何巧妙使用7段码数码管?
  9. 推荐技术微信群和QQ群
  10. java小程序——数字找规律小游戏