安卓第一课:通过一个简单的MP3播放器来认识安卓开发【下】

        前面我们讲解了如何从SD卡中获取MP3文件的列表,并将文件列表放置到一个ListView里。后来发现还少提一个内容就是权限问题,我们需要在Android Application的AndroidManifest.xml文件中添加如下一行内容:

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

        网上找的。然后思考下这里给的是WRITE的权限,但是我们并没有写啊,所以估计这个WRITE是向下兼容的(毕竟写要比读高级一点点)。再进行搜索,得到如下的说明:

        http://blog.csdn.net/stephen255/article/details/9142923

        上面的blog中列出了大量的权限说明,应该足够用了!

        下面回到正题,开始播放器设定。

        首先我们设定一个全局的播放器对象:private MediaPlayer mp=null;

        通过搜索引擎的查询我们获知对于MediaPlayer主要需要设置一下几个方法来进行播放:

        1、setDataSource——设置播放器的播放源(本地文件或者网络地址文件)

        2、prepare——相当于开始装载播放源,准备播放

        【如果是利用MediaPlayer的create方法来创建的播放对象以上两步是可以省略的,因为在create的时候已经完成了】

        3、start——开始播放(其他辅助方法有:pause、stop、seekTo等)

        其他还有些事件监听:setOnCompletionListener、setOnSeekCompleteListener等

        有兴趣的同学可以查看API文档:http://www.android-doc.com/reference/android/media/MediaPlayer.html

        我们这里就简单的使用下setDataSource、prepare和start先。

        那么我们该什么时候去NEW一个MediaPlayer的实例,当然是选择列表中的某一项的时候。那么当我们选择列表中的某一项时会激发什么事件呢?这就需要看看ListView有哪些事件监听,通过查询API,我们找到了setOnItemClickListener事件监听(不过这个不是属于ListView类的,而是继承自AdapterView类。

        所以我们修改前一篇中的代码:

    lvMP3List.setAdapter(ladapter); 
    lvMP3List.setOnItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
            // TODO Auto-generated method stub
        }
    });
        这里我们就对lvMP3List这个ListView设置了ItemClick的事件监听,并重写了onItemClick方法。该方法有四个参数分别表示了适配器、适配器里的项、位置、行号。这时我们需要取得我们所点的那行中的MP3个歌曲的地址,所以我们在onItemClick方法里添加代码如下:
// TODO Auto-generated method stub
TextView tv=(TextView)arg1.findViewById(R.id.ItemText);
String currentMP3=(String) tv.getText();
        通过表示适配器里的项的那个参数arg1来找到ID为ItemText的文本框。还记得前面设置适配器的时候的relative.xml文件中有两个TextView,一个叫ItemText,一个叫ItemTitle,前者表示完整路径,后者表示文件名。我们这里需要完整路径,所以就获取ItemText的值。

        然后我们就可以播放了:

// TODO Auto-generated method stub
TextView tv=(TextView)arg1.findViewById(R.id.ItemText);
String currentMP3=(String) tv.getText();
mp=new MediaPlayer();
mp.setDataSource(currentMP3);
mp.prepare();
mp.start();
        但是写了上面的代码后系统会提示你setDataSource和prepare两个方法可能会有异常,所以推荐使用try/catch来捕获,使用系统推荐的处理方法:surround with try/catch。完整代码如下:       
// TODO Auto-generated method stub
TextView tv=(TextView)arg1.findViewById(R.id.ItemText);
String currentMP3=(String) tv.getText();
mp=new MediaPlayer();
try {
    mp.setDataSource(currentMP3);
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
try {
    mp.prepare();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
mp.start();
        好了。现在我们可以run as android application了。

        不过运行了之后我们发现点了某行之后的确能播放该MP3音乐,但是也出现了一个问题,点了一行,播放了,然后再点另外一行,又播放了,然后两个音乐就混在一起了。

        OK,思考题出来了。

        思考题一:同一时间只能播放一首音乐

        思考题二:在界面上添加播放进度条,并且能够拖动播放

        思考题三:当我们点了返回按钮或者主界面按钮后,音乐播放并没有停止,这个该如何实现。

        以上思考题第一题是必须要实现的,思考题二可以尝试,思考题三请先看后面一篇“android生命周期”文章后再实现,或者自己百度android生命周期。从而也能比较容易的实现。

       

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值