第一课的前提就是环境配置,我认为大家都已经OK了,呵呵。环境配置主要就是SDK管理和虚拟机管理,反正让大家下载的也是个集成的环境,不需要Eclipse上做任何配置。
那么接下来就是new一个android的application。除了名字自己起一个外其他的设置都可以选择默认,至于每个界面的一些参数设定是什么意思,我相信各位同学的E文是绝对杠杠的。
一个空的项目建立好之后按照经典的代码学习之路默认就是一个内容为“hello world”的TextView(这里要提下的就是我习惯称Eclipse里的工具箱里的项目为控件,但是这里通常称之位View)。大家可以Run as android application下,看到跑起来的这个应用就显示了HELLO WORLD。
在这个第一课的播放器中,我们很简单的就用了一个控件:ListView。也就是说用了一个列表控件,列表控件里放什么,自然是歌曲列表了。恩,先中断下。
【还要交代下,因为要播放MP3,我们需要将MP3文件先拷贝到模拟器上去(当然可以利用网络地址,但是这里不交代)。方法就是利用DDMS里的File Explorer把MP3文件放到SD卡上(所以还要注意下当初创建模拟器的时候需要给模拟器一个SD空间)。还有点要注意的是这个MP3的文件名最好没有中文、空格,当然有了会产生什么后果也不确定,最多就是识别不出来,这个你们可以自己测试,然后自己解决,这样就有很大进步了啊,继续前一个学期的看好你们!】
中断结束
我们先来交代下这个ListView。本来么List也就是个列表,按照以前用C#的经验么直接ADDITEM就可以添加了。但是这里ListView貌似不能直接ADD。查了下资料(现在只有用百度了),关键字就是android listview,然后就看到结果了,通读一下原来ListView里面的列表项的添加类似这么一个过程:定义一个适配器,将数据放到适配器里,然后将这个适配器作为列表的数据源。而其中适配器的种类有好几种,我们这里使用下一个比较麻烦的类别SimpleAdapter。因为这个适配器可以自定义显示界面而不是默认的一串文本。
1、我们先来定义一个界面文件:在res的layout上右击,new一个other里的layout xml文件,文件名定义为relative.xml,界面代码如下:
<RelativeLayout
android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:paddingBottom="3dip"
android:paddingLeft="10dip"
android:paddingRight="10dip">
<TextView
android:id="@+id/ItemTitle"
android:text="TextView01"
android:layout_height="wrap_content"
android:textSize="18dip"
android:layout_width="fill_parent"
/>
<TextView
android:id="@+id/ItemText"
android:text="TextView02"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@+id/ItemTitle"
/>
</RelativeLayout>
RelativeLayout表示布局类型(什么是布局类型,简单的说就是界面上控件的排列方式,复杂的说去百度),然后在这个布局模式里放了两个TextView,一个叫ItemText,一个叫ItemText。
2、在默认的主界面:res下的layout里的activity_main.xml文件中放一个ListView,ID自定义,这里改名为lvMusicList。然后我们就可以去写代码了。
3、修改代码文件:src下的自定义包名下的MainActivity.java文件。
3.1 定义几个全局变量
//用来接收主界面上的ListView
ListView lvMP3List ;
//用来接收SD卡上扫描得到的MP3文件
private ArrayList<File> list ;
//用来作为列表项的数据源适配器
private SimpleAdapter ladapter=null;
//MP3播放器
private MediaPlayer mp=null;
3.2 在onCreate方法中初始化
//接收主界面中的列表控件
lvMP3List = (ListView) findViewById(R.id.lvMusicList);
//实例化一个数组列表项,里面的每项都是File类型的
list = new ArrayList<File>();
//扫描SD卡根目录下的文件,获取MP3文件,这里的getAllFiles是一个自定义函数
getAllFiles(Environment.getExternalStorageDirectory());
//实例化一个SimpleAdapter对象,并将上面ArrayList的内容填充进去,同样这里有个自定义函数getMapData
ladapter = new SimpleAdapter(this,getMapData(list),R.layout.relative, new String[]{"ItemText","ItemTitle"},new int[]{R.id.ItemTitle,R.id.ItemText});
//设置ListView的数据源为上面这个适配器
lvMP3List.setAdapter(ladapter);
3.3 本来应该加播放器的东西了,但是我们一步步的来,先把文件列表搞好再说。关于文件列表功能这里还缺的就是两个自定义函数getAllFiles和getMapData
private void getAllFiles(File root){
File files[] = root.listFiles();
if(files != null)
{
for(File f:files){
if(!f.isDirectory() && f.getName().lastIndexOf(".mp3")!=-1){ //这里是可以再做完善的
this.list.add(f);
}
}
}
}
private ArrayList<Map<String, Object>> getMapData(ArrayList<File> list){
ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
HashMap<String,Object> item;
int i = 0 ;
for(i=0;i<list.size();i++){
item = new HashMap<String,Object>();
String path = list.get(i).toString();
String name = path.substring(path.lastIndexOf("/")+1,path.length());
item.put("ItemText",name);
item.put("ItemTitle", path);
data.add(item);
}
return data;
}
3.4 到这里为止文件列表应该能出来了,如果出不来,恭喜你获得了一个极好的学习机会,调试调试再调试。
【播放器相关待续】