`

借鉴 Mini音乐播放器

阅读更多
继上篇音乐播放器,我们讲到使用 SDCard 播放音乐的例子,上篇也将如何在Android 模拟器中创建 SDCard 的步骤列了出来。本篇将扩展上篇例子,去获取SDCard 的所存内存,显示出来告诉用户。本篇讲述的内容如下:
  • 1、讲述 Environment 类。
  • 2、讲述 StatFs 类。
  • 3、完整例子读取 SDCard 内存

1、讲述 Environment 类Environment 是一个提供访问环境变量的类Environment 包含常量:

  • MEDIA_BAD_REMOVAL
    解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除
  • MEDIA_CHECKING
    解释:返回getExternalStorageState() ,表明对象正在磁盘检查。
  • MEDIA_MOUNTED
    解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限
  • MEDIA_MOUNTED_READ_ONLY
    解释:返回getExternalStorageState() ,表明对象权限为只读
  • MEDIA_NOFS
    解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。
  • MEDIA_REMOVED
    解释:返回getExternalStorageState() ,如果不存在 SDCard 返回
  • MEDIA_SHARED
    解释:返回getExternalStorageState() ,如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回
  • MEDIA_UNMOUNTABLE
    解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装
  • MEDIA_UNMOUNTED
    解释:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard 是存在但是没有被安装

Environment 常用方法:

  • 方法:getDataDirectory()
    解释:返回 File ,获取 Android 数据目录。
  • 方法:getDownloadCacheDirectory()
    解释:返回 File ,获取 Android 下载/缓存内容目录。
  • 方法:getExternalStorageDirectory()
    解释:返回 File ,获取外部存储目录即 SDCard
  • 方法:getExternalStoragePublicDirectory(String type)
    解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件
  • 方法:getExternalStorageState()
    解释:返回 File ,获取外部存储设备的当前状态
  • 方法:getRootDirectory()
    解释:返回 File ,获取 Android 的根目录

2、讲述 StatFs 类StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 常用方法:

  • getAvailableBlocks()
    解释:返回 Int ,获取当前可用的存储空间
  • getBlockCount()
    解释:返回 Int ,获取该区域可用的文件系统数
  • getBlockSize()
    解释:返回 Int ,大小,以字节为单位,一个文件系统
  • getFreeBlocks()
    解释:返回 Int ,该块区域剩余的空间
  • restat(String path)
    解释:执行一个由该对象所引用的文件系统

3、完整例子读取 SDCard 内存存储卡在 Android 手机上是可以随时插拔的,每次的动作都对引起操作系统进行 ACTION_BROADCAST,本例子将使用上面学到的方法,计算出 SDCard 的剩余容量和总容量。代码如下:


下面是图例显示 MediaPlayer 的生命周期


3.1、MediaPlayer 常用方法介绍

  • 方法:create(Context context, Uri uri)
    解释:静态方法,通过Uri创建一个多媒体播放器。
  • 方法:create(Context context, int resid)
    解释:静态方法,通过资源ID创建一个多媒体播放器
  • 方法:create(Context context, Uri uri, SurfaceHolder holder)
    解释:静态方法,通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器
  • 方法: getCurrentPosition()
    解释:返回 Int, 得到当前播放位置
  • 方法: getDuration()
    解释:返回 Int,得到文件的时间
  • 方法:getVideoHeight()
    解释:返回 Int ,得到视频的高度
  • 方法:getVideoWidth()
    解释:返回 Int,得到视频的宽度
  • 方法:isLooping()
    解释:返回 boolean ,是否循环播放
  • 方法:isPlaying()
    解释:返回 boolean,是否正在播放
  • 方法:pause()
    解释:无返回值 ,暂停
  • 方法:prepare()
    解释:无返回值,准备同步
  • 方法:prepareAsync()
    解释:无返回值,准备异步
  • 方法:release()
    解释:无返回值,释放 MediaPlayer 对象
  • 方法:reset()
    解释:无返回值,重置 MediaPlayer 对象
  • 方法:seekTo(int msec)
    解释:无返回值,指定播放的位置(以毫秒为单位的时间)
  • 方法:setAudioStreamType(int streamtype)
    解释:无返回值,指定流媒体的类型
  • 方法:setDataSource(String path)
    解释:无返回值,设置多媒体数据来源【根据 路径】
  • 方法:setDataSource(FileDescriptor fd, long offset, long length)
    解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
  • 方法:setDataSource(FileDescriptor fd)
    解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
  • 方法:setDataSource(Context context, Uri uri)
    解释:无返回值,设置多媒体数据来源【根据 Uri】
  • 方法:setDisplay(SurfaceHolder sh)
    解释:无返回值,设置用 SurfaceHolder 来显示多媒体
  • 方法:setLooping(boolean looping)
    解释:无返回值,设置是否循环播放
  • 事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
    解释:监听事件,网络流媒体的缓冲监听
  • 事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
    解释:监听事件,网络流媒体播放结束监听
  • 事件:setOnErrorListener(MediaPlayer.OnErrorListener listener)
    解释:监听事件,设置错误信息监听
  • 事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
    解释:监听事件,视频尺寸监听
  • 方法:setScreenOnWhilePlaying(boolean screenOn)
    解释:无返回值,设置是否使用 SurfaceHolder 显示
  • 方法:setVolume(float leftVolume, float rightVolume)
    解释:无返回值,设置音量
  • 方法:start()
    解释:无返回值,开始播放
  • 方法:stop()
    解释:无返回值,停止播放

4、完整音乐播放例子演示通过上面的讲解大致知道了 MediaPlayer 的播放原理,下面我们来完成一个小项目,即实现一个 Mini 版音乐播放器。这个播放器中我们需要有暂停、停止、上一首、下一首等基本按钮,有了上面的讲解要实现这个小项目就轻松多了,下面将贴出代码

  1. import java.io.File;
  2. import java.io.FilenameFilter;[/font]
  3. public class MusicFilter implements FilenameFilter{
  4. @Override
  5. public boolean accept(File dir, String filename) {
  6. // TODO Auto-generated method stub
  7. return (filename.endsWith(".mp3"));
  8. }
  9. }
复制代码

Tip:播放器不可能只是希望播放一种音乐格式,并且还需要自动识别指定的路径中哪些是可以播放的音频文件,哪些是不支持的格式,以上代码可以作为参考。好了,下面贴出完整代码

  1. package com.terry;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import android.app.ListActivity;
  6. import android.media.MediaPlayer;
  7. import android.media.MediaPlayer.OnCompletionListener;
  8. import android.os.Bundle;
  9. import android.view.KeyEvent;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.Button;
  14. import android.widget.ListView;
  15. import android.widget.Toast;
  16. public class musicActivity extends ListActivity {
  17. //播放对象
  18. private MediaPlayer myMediaPlayer;
  19. //播放列表
  20. private List<String> myMusicList=new ArrayList<String>();
  21. //当前播放歌曲的索引
  22. private int currentListItem=0;
  23. //音乐的路径
  24. private static final String MUSIC_PATH=new String("/sdcard/");
  25. /** Called when the activity is first created. */
  26. @Override
  27. public void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.main);
  30. myMediaPlayer=new MediaPlayer();
  31. findView();
  32. musicList();
  33. listener();
  34. }
  35. //绑定音乐
  36. void musicList(){
  37. File home=new File(MUSIC_PATH);
  38. if(home.listFiles(new MusicFilter()).length>0){
  39. for(File file:home.listFiles(new MusicFilter())){
  40. myMusicList.add(file.getName());
  41. }
  42. ArrayAdapter<String> musicList=new ArrayAdapter<String>
  43. (musicActivity.this,R.layout.musicitme, myMusicList);
  44. setListAdapter(musicList);
  45. }
  46. }
  47. //获取按钮
  48. void findView(){
  49. viewHolder.start=(Button)findViewById(R.id.start);
  50. viewHolder.stop=(Button)findViewById(R.id.stop);
  51. viewHolder.next=(Button)findViewById(R.id.next);
  52. viewHolder.pause=(Button)findViewById(R.id.pause);
  53. viewHolder.last=(Button)findViewById(R.id.last);
  54. }
  55. //监听事件
  56. void listener(){
  57. //停止
  58. viewHolder.stop.setOnClickListener(new OnClickListener() {
  59. @Override
  60. public void onClick(View v) {
  61. // TODO Auto-generated method stub
  62. if(myMediaPlayer.isPlaying()){
  63. myMediaPlayer.reset();
  64. }
  65. }
  66. });
  67. //开始
  68. viewHolder.start.setOnClickListener(new OnClickListener() {
  69. @Override
  70. public void onClick(View v) {
  71. // TODO Auto-generated method stub
  72. playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
  73. }
  74. });
  75. //下一首
  76. viewHolder.next.setOnClickListener(new OnClickListener() {
  77. @Override
  78. public void onClick(View v) {
  79. // TODO Auto-generated method stub
  80. nextMusic();
  81. }
  82. });
  83. //暂停
  84. viewHolder.pause.setOnClickListener(new OnClickListener() {
  85. @Override
  86. public void onClick(View v) {
  87. // TODO Auto-generated method stub
  88. if(myMediaPlayer.isPlaying()){
  89. myMediaPlayer.pause();
  90. }else{
  91. myMediaPlayer.start();
  92. }
  93. }
  94. });
  95. //上一首
  96. viewHolder.last.setOnClickListener(new OnClickListener() {
  97. @Override
  98. public void onClick(View v) {
  99. // TODO Auto-generated method stub
  100. lastMusic();
  101. }
  102. });
  103. }
  104. //播放音乐
  105. void playMusic(String path){
  106. try {
  107. myMediaPlayer.reset();
  108. myMediaPlayer.setDataSource(path);
  109. myMediaPlayer.prepare();
  110. myMediaPlayer.start();
  111. myMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
  112. @Override
  113. public void onCompletion(MediaPlayer mp) {
  114. // TODO Auto-generated method stub
  115. nextMusic();
  116. }
  117. });
  118. } catch (Exception e) {
  119. // TODO: handle exception
  120. e.printStackTrace();
  121. }
  122. }
  123. //下一首
  124. void nextMusic(){
  125. if(++currentListItem>=myMusicList.size()){
  126. currentListItem=0;
  127. }
  128. else{
  129. playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
  130. }
  131. }
  132. //上一首
  133. void lastMusic(){
  134. if(currentListItem!=0)
  135. {
  136. if(--currentListItem>=0){
  137. currentListItem=myMusicList.size();
  138. } else{
  139. playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
  140. }
  141. } else{
  142. playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
  143. }
  144. }
  145. //当用户返回时结束音乐并释放音乐对象
  146. @Override
  147. public boolean onKeyDown(int keyCode, KeyEvent event) {
  148. // TODO Auto-generated method stub
  149. if(keyCode==KeyEvent.KEYCODE_BACK){
  150. myMediaPlayer.stop();
  151. myMediaPlayer.release();
  152. this.finish();
  153. return true;
  154. }
  155. return super.onKeyDown(keyCode, event);
  156. }
  157. //当选择列表项时播放音乐
  158. @Override
  159. protected void onListItemClick(ListView l, View v, int position, long id) {
  160. // TODO Auto-generated method stub
  161. currentListItem=position;
  162. playMusic(MUSIC_PATH+myMusicList.get(currentListItem));
  163. }
  164. }
分享到:
评论

相关推荐

    Android Mini音乐播放器.rar

    【Android Mini音乐播放器】是一个基于Android平台的轻量级音乐播放应用项目,它提供了基本的音乐播放功能,包括播放、暂停、上一首、下一首、音量控制等。源码的分享对于开发者来说是一份宝贵的教育资源,可以深入...

    高仿QQ音乐播放器界面设计,后端根据自己需要

    2. **视觉一致性**:保持整体色调和风格的一致性,可以借鉴QQ音乐的蓝绿主题,以营造轻松舒适的氛围。 3. **个性化设置**:提供背景图片更换、主题颜色选择等个性化选项,满足不同用户的审美需求。 4. **音乐库...

    FLASH音乐播放器控制

    在网页设计中,Flash音乐播放器是一种常见的多媒体元素,它能够为网站增添动态效果和音频体验,提升用户体验。本文将详细讲解"FLASH音乐播放器控制"这一主题,包括其基本概念、工作原理以及如何实现和优化。 一、...

    安卓remusic仿网易音乐播放器源代码

    【Android Remusic:仿网易音乐播放器源代码详解】 在移动开发领域,尤其是安卓平台,开发者经常寻找优秀的项目源码来学习和借鉴。"安卓remusic仿网易音乐播放器源代码"就是一个很好的学习实例,它复刻了网易云音乐...

    易语言MP3音乐播放器源码

    易语言MP3音乐播放器源码是一个使用易语言编程实现的音乐播放软件的代码实例。易语言是一款中国本土开发的、面向初学者和专业开发者 ...同时,这也为其他类型的应用程序开发提供了借鉴,如视频播放器、媒体中心等。

    易语言高仿音乐播放器

    【易语言高仿音乐播放器】是一款由编程语言“易语言”(E Language)精心制作的音乐播放软件,它的设计灵感来源于广受欢迎的QQ...对于想要学习易语言或者开发音乐播放器的开发者来说,这是一个值得研究和借鉴的项目。

    android 音乐播放器 源码

    《Android音乐播放器源码详解》 Android音乐播放器源码是开发人员学习和实践Android音频处理技术的重要参考资料。此源码实现了一个功能完善的音乐播放器,具备友好的用户界面和良好的实用性。通过深入分析这个源码...

    Symbian 3版 音乐播放器

    《Symbian 3版音乐播放器:深度解析与功能实现》 Symbian操作系统,作为曾经智能...虽然Symbian系统已逐渐淡出主流市场,但其在音乐播放器设计上的经验仍然值得借鉴,对于现代移动平台的音频应用开发具有参考价值。

    WPF强大音乐播放器

    **WPF强大音乐播放器** 是一款基于Windows Presentation Foundation(WPF)技术开发的音乐播放...通过学习和分析其源码,开发者可以提升在WPF和C#开发领域的技能,同时也能借鉴其设计思路来构建自己的音乐播放应用。

    音乐播放器 源代码

    《音乐播放器源代码解析与学习指南》 在IT领域,源代码是程序员的语言,它构建了我们日常使用的各种应用程序。本篇文章将深入探讨一款基于C语言编写的音乐播放器源代码,以此来揭示其中的技术细节和编程思路,旨在...

    基于FPGA的音乐播放器设计.pdf

    基于FPGA的音乐播放器设计是一项利用现场可编程门阵列(FPGA)技术实现的硬件项目,涉及硬件技术与硬件开发的专业指导。FPGA是一种可以通过编程来配置的半导体器件,它在电子设计自动化(EDA)领域中具有重要地位。...

    一款音乐播放器 APP (源码+项目说明)(数据爬取 QQ 音乐网页端,实现歌曲查询和播放,歌词显示及其歌曲下载等功能).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、...一款音乐播放器 APP (源码+项目说明)(数据爬取 QQ 音乐网页端,实现歌曲查询和播放,歌词显示及其歌曲下载等功能).zip

    Android4.3系统内置音乐播放器

    Android 4.3内置音乐播放器的源码分析,不仅可以提升开发者对Android多媒体框架的理解,还能借鉴其设计思路,用于构建自己的音乐应用。通过对播放器的各个模块进行拆解和学习,开发者可以更好地掌握Android开发中的...

    小刀SOHO音乐播放器易源码

    源码的开放使得开发者们有机会深入理解音乐播放器的实现原理,学习和借鉴其中的技术,对个人技能提升和项目开发有着积极的促进作用。 首先,从“小刀音乐”的标签我们可以推测,这款播放器的主要功能是播放音乐,...

    基于HTML5+JavaScript开发简洁美观的网页音乐播放器源码+项目说明.tar

    基于HTML5+JavaScript开发简洁美观的网页音乐播放器源码+项目说明.tar基于HTML5+JavaScript开发简洁美观的网页音乐播放器源码+项目说明.tar基于HTML5+JavaScript开发简洁美观的网页音乐播放器源码+项目说明.tar基于...

    ASP源码—PK990 flash 音乐播放器 v2.49.zip

    通过学习和理解这个ASP Flash音乐播放器的源码,开发者不仅可以提升对ASP和Flash编程的理解,还能从中借鉴到音乐播放器的设计思路,这将有助于他们创建自己的Web应用程序,尤其是涉及到多媒体内容的项目。

    VB界面UI漂亮的音乐播放器.rar

     本音乐播放器除了可以完成基本的音乐播放外,还增加了一些扩展功能,比如播放模式、载入歌曲列表、设置音乐目录、显示音乐列表等,界面上也有不少值得借鉴的地方,比如展开、折叠窗口,窗口拖动及自动吸附等,界面...

    基于android音乐播放器的设计与实现专科毕设毕业论文.doc

    论文的主要贡献在于提出了基于 Android 平台的音乐播放器的设计与实现方案,为音乐播放器的发展提供了参考和借鉴。 Android 音乐播放器的设计与实现是基于 Android 平台的音乐播放器的设计与实现的重要组成部分。...

    HF音乐-鸿蒙音乐播放器源码

    【HF音乐-鸿蒙音乐播放器源码】是一款基于HarmonyOS操作系统开发的音乐播放软件。作为HarmonyOS生态的一部分,这款源码提供了一个完整的音乐播放解决方案,包含了音乐播放器的基础功能,用户在获取源码后,只需进行...

    一个音乐播放器源码+项目说明.zip

    一个音乐播放器源码+项目说明.zip一个音乐播放器源码+项目说明.zip一个音乐播放器源码+项目说明.zip一个音乐播放器源码+项目说明.zip一个音乐播放器源码+项目说明.zip一个音乐播放器源码+项目说明.zip一个音乐播放器...

Global site tag (gtag.js) - Google Analytics