学习安卓开发有一年了,想想这一年的努力,确实也收获了不少。也找到了比較如意的工作。

今天准备分享一个以前在初学阶段练习的一个项目。通过这个项目我真正的找到了开发安卓软件的感觉,从此逐渐步入安卓开发的正规。这个项目是当时借鉴Mars老师的初学视频做的安州手机的MP3播放器。自己又进行了改进,特别在歌词的优化和加入进度条方面的。因为是8个月前做的,水平非常0基础,bug应该非常多,如今自己又懒得再一次改进,仅仅希望可以给初学的朋友们提供一些帮助。或者起到抛砖引玉的效果。那我就心惬意足了。

先整体介绍下这个MP3播放器。非常easy,首先是本地列表页面(界面非常low,大家不要笑):

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

列表左边是歌曲名,右边是对应的歌曲大小(字节)。

点击一首歌曲,进入播放页面,就能够播放、暂停和停止音乐。任意调整进度条调整歌曲播放的进度,歌词也相应调整:

首先从本地音乐列表入手来谈,比較简单先看代码:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List; import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast; public class LocalMp3Activity extends ListActivity{ List<MP3Info> mp3Infos = null;
SimpleAdapter simpleAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.localmp3); }
/**
* 每次启动本地列表页面又一次加载本地MP3
*/
@Override
protected void onResume() {
FileUtil fileutil = new FileUtil();
mp3Infos = fileutil.getMp3("mp3/"); // for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {/////////////////
// MP3Info mp3Info = (MP3Info) iterator.next();
// Log.d("yinan", "LocalMp3Activity--------"+mp3Info.toString());
// }
if(mp3Infos.size() == 0){
Toast.makeText(this, "没有本地音乐", 0).show();
simpleAdapter = buildAdapter(mp3Infos);
setListAdapter(simpleAdapter);
}else{ simpleAdapter = buildAdapter(mp3Infos);
setListAdapter(simpleAdapter); } super.onResume();
} /**
* 封装了ListView的适配器
* @param mp3Infos
* @return
*/
private SimpleAdapter buildAdapter(List<MP3Info> mp3Infos){ List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
for (Iterator iterator = mp3Infos.iterator(); iterator.hasNext();) {
MP3Info mp3Info = (MP3Info)iterator.next();
HashMap<String,String> map = new HashMap<String,String>();
map.put("mp3_name", mp3Info.getMp3Name());
map.put("mp3_size", mp3Info.getMp3Size());
list.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this,list,R.layout.locallist,new String[]{"mp3_name","mp3_size"},new int[]{R.id.mp3_name,R.id.mp3_size});
return simpleAdapter;
}
/**
* 实现ListView的列表点击事件
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
if(mp3Infos != null){
MP3Info mp3Info = mp3Infos.get(position);
Intent intent = new Intent();
intent.putExtra("mp3Info", mp3Info); intent.setClass(this, PlayActivity.class);
startActivity(intent);
} } }
   

看到加载本地MP3这里有一个FileUtil类,是这个程序处理文件的类,看看getMp3方法怎样实现:

/**获取手机sd卡文件夹下path文件夹下的以“MP3”为后缀的文件,返回mp3文件集合
* 不仅获得了歌曲文件名称,还获得了相应的歌词文件名称
* @param path
* @return
*/
public List<MP3Info> getMp3(String path){
List<MP3Info> mp3Infos = new ArrayList<MP3Info>();
//
File f = new File(SDPATH+"/"+path);
File[] files = f.listFiles(); for (int i = 0; i < files.length; i++) {
//获取名字包括mp3字样的文件
if(files[i].getName().indexOf("mp3")>0){ MP3Info mp3Info = new MP3Info();
mp3Info.setMp3Name(files[i].getName());
mp3Info.setMp3Size(files[i].length()+"");
//以.为标志将文件名称分开。存入字符串数组
String s[] = mp3Info.getMp3Name().split("\\.");
String lrcName = s[0]+".lrc"; mp3Info.setLrcName(lrcName); mp3Infos.add(mp3Info); } }
//}
return mp3Infos;
}
}

当中   String SDPATH  = Environment.getExternalStorageDirectory() + "";

每次进入本地列表,都会调用Activity的onResume方法。随后载入全部本地MP3歌曲的信息。然后通过一个SimpleAdapter,将MP3的信息显示出来。最后为列表加入了点击事件。该点击事件是点击某歌曲进入播放列表的事件。

好了。第一部分很easy,第二部分我们再来看关于音乐播放部分。

安卓MP3播放器开发实例(1)之音乐列表界面的更多相关文章

  1. 安卓MP3播放器开发实例(3)之进度条和歌词更新的实现

    上一次谈了音乐播放的实现,这次说下最复杂的进度条和歌词更新.因为须要在播放的Activity和播放的Service间进行交互,所以就涉及了Activity对Service的绑定以及绑定后数据的传输,这 ...

  2. 【Android】利用安卓的数据接口、多媒体处理编写内存卡Mp3播放器app

    通过调用安卓的MediaPlayer能够直接完毕Mp3等主流音频的播放,同一时候利用ContentResolver与Cursor能够直接读取安卓内在数据库的信息.直接获取当前sdcard中全部音频的列 ...

  3. android音乐播放器开发教程

    android音乐播放器开发教程 Android扫描sd卡和系统文件 Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能 android操作sdcard中的多媒体文件——音乐列表 ...

  4. 你用java的swing可以做出这么炫的mp3播放器吗?

    这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...

  5. 开源mp3播放器--madplay 编译和移植 简记

    madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...

  6. 从零开始学习PYTHON3讲义(十四)写一个mp3播放器

    <从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...

  7. C# wave mp3 播放器探寻

    C# wave mp3 播放器探寻   最近无聊,想听听歌曲.可怜新电脑上歌曲就两三首,要听其它的就得在旧电脑上播放.可是,那台古董但不失健壮的本本被老婆无情的霸占了.无奈. 思来想去,得,写个程序播 ...

  8. 团队编程--MP3播放器

    设计思路: 这次的作业是一个MP3播放器,它是一个团队项目.由于我们都没接触过这类的编程.刚开始的时候我们是不知道从什么地方着手的.经过我们的商量我们决定从现在市场主流的音乐播放器上找到几个主要的功能 ...

  9. 基于GStreamer编写Mp3播放器

    一.简介 作者系统为CentOS6,本文在此基础上对Mp3播放器进行开发,需要使用mp3解码库libmad和gstreamer0.10-plugins-ugly,详细步骤如下.   二.操作步骤 1) ...

随机推荐

  1. Light OJ 1318 Strange Game 组合数+高速幂+分解因子

    长度为l的用k种字符组成的字符串有k^l中 当中m个字符要不同样 那就是k^l*C(l, m)*(k-1)^m 有反复 要除以2 可是你mod n了 不能直接除 n不一定是素数 所以不能乘以逆元 所以 ...

  2. NVelocity 实例

    using System; using System.IO; using System.Collections; using System.Collections.Generic; using Sys ...

  3. WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式效率高、灵活性强,还有UpdateWindow和RedrawWindow帮忙)

    Q:wm_paint消息在窗口重绘的时候产生,那什么时候窗口会重绘?? A: 严格地说,只有当收到WM_PAINT消息后窗口会重绘 但是引起这个消息的事件有很多, 比如:1.首次创建 2.移动 3.改 ...

  4. 【linux】开发环境说明

    欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...

  5. (摘录)ASP.NET提供文件下载函数(支持大文件、续传、速度限制、资源占用小)

    // 输出硬盘文件,提供下载 // 输入参数 _Request: Page.Request对象, _Response: Page.Response对象, _fileName: 下载文件名, _full ...

  6. GDI GDI+ 的区别

    GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好.GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你 ...

  7. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  8. Windows Azure入门教学系列 (九):Windows Azure 诊断功能

    本文是Windows Azure入门教学的第九篇文章. 本文将会介绍如何使用Windows Azure 诊断功能.跟部署在本地服务器上的程序不同,当我们的程序发布到云端之后,我们不能使用通常的调试方法 ...

  9. Spring Session - Spring Boot

    The completed guide can be found in the boot sample application. Updating Dependencies Before you us ...

  10. 【cocos2d-js公文】十七、事件分发机制

    简单介绍 游戏开发中一个非常重要的功能就是交互,假设没有与用户的交互.那么游戏将变成动画,而处理用户交互就须要使用事件监听器了. 总概: 事件监听器(cc.EventListener) 封装用户的事件 ...