Android 下简单的 MP3 播放(代码分析)
本代码为教学材料,仅作学习使用,分析在注释里。
采用读取 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 播放(代码分析)相关推荐
- HTML中简单的声音语音MP3播放代码
HTML中简单的声音语音MP3播放代码 在网页中播放MP3 语音播放代码 各浏览器默认支持的音频格式 在网页中播放MP3 我们有时候需要在网页里播放一段提示声音,如何通过几行代码就能实现在网页中播放各 ...
- android 存放音频文件夹里,Android 实现简单的音乐播放器效果(音频文件的三种存放)...
Android 实现简单的音乐播放器效果(音频文件的三种存放).三种方法主要使用到的类 MediaPlayer.create() getAssets() new Mediaplayer() - 几个控 ...
- 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 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )
文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...
- GStreamer 编写一个简单的MP3播放器
本文介绍如何使用GStreamer 编写一个简单的MP3播放器. 1,需要使用mad解码插件,因此需要先安装gstreamer0.10-plugins-ugly 2,编写mp3播放器 下面来看看如何利 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )
文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )
文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )
文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...
最新文章
- 6-5-树的双亲表示法-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...
- 推荐系统中基于深度学习的混合协同过滤模型
- 【算法学习笔记】57. 前缀树 字典序优化技巧 STL学习 SJTU OJ 1366 前缀匹配
- 排错-Loadrunner录制打不开浏览器解决方法
- DataAdapter对象
- 华为app安装失败与已安装签名_手机APP为什么总是安装失败
- 计算机平面设计专业有哪些课程,计算机平面设计专业课程有哪些?
- Atom飞行手册翻译: 3.4 文本处理包
- python调试_Python 调试
- IBM HMC V7R740虚拟机安装实战
- rm: cannot remove `.user.ini‘: Operation not permitted异常该如何解决?
- STM32固件库下载步骤
- 图解三层交换机:局域网都用它来组网
- 基于Android studio开发的图灵智能聊天机器人
- 贴片物料/电容/电阻的英制与公制封装
- 火狐浏览器的下载安装
- 地理空间框架(二):大地水准面、似大地水准面、参考椭球面
- Appops权限管理
- 小区数字IP广播系统
- 嵌入式软件是怎么分类的?