安卓基础 论MediaPlayer的应用(三)

来源:互联网 发布:kindle软件怎么用 编辑:程序博客网 时间:2024/06/05 05:34
这次的版本,做了许多的改变,增加了SeekBar进度条,上一首,下一首,以及长按Item删除歌曲的功能。当然也是还有bug的,另外UI也是做了适当的美化。本章节的主要知识点是BroadcastReceiver,自定义简单listView适配器,以及handler更新界面。基本的音乐播放器功能都已经实现。下面贴出关键代码首先是创建一个全局变量类Data.java
package com.android.MyMediaPlayer;import android.app.Application;public class Data extends Application {    private int index;    public int getIndex() {        return index;    }    public void setIndex(int index) {        this.index = index;    }    @Override    public void onCreate() {        super.onCreate();        index = 0;    }}

添加这个全局变量index是为了在不同的类里引用它时更方便,它记录了音乐播放的下标,初始化为0,代表默认播放第一首音乐。
要使用这个全局变量类请在配置文件里添加
这里写图片描述
还有就是我写了一点点的自定义listView数据适配器
主要重写了getView()方法。
MySimpleAdapter.java

package com.android.MyMediaPlayer;import java.util.List;import java.util.Map;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.SimpleAdapter;public class MySimpleAdapter extends SimpleAdapter {    int mSelect = 0; // 选中项    private Context context;    private Data appData;    public void changeSelected(int positon) { // 刷新方法        if (positon != mSelect) {            mSelect = positon;            appData.setIndex(positon);            notifyDataSetChanged();        }    }    public MySimpleAdapter(Context context,            List<? extends Map<String, ?>> data, int resource, String[] from,            int[] to) {        super(context, data, resource, from, to);        this.context = context;        appData=(Data) context.getApplicationContext();    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        LayoutInflater factory = LayoutInflater.from(context);        View v;        v = (View) factory.inflate(R.layout.music_list_item, null);        if (mSelect == position) {//          v.setBackgroundResource(R.drawable.top_bak); // 选中项背景        } else {            v.setBackgroundResource(R.drawable.transparent); // 其他项背景        }        if (appData.getIndex()==position) {            v.setBackgroundResource(R.drawable.top_bak);        }        return super.getView(position, v, parent);    }}

我的获取本地音乐是用的别人代码,网上这类很多,我用的是调用系统本地媒体库,可以读出许多数据。想具体了解可以百度,源码我就不贴了,下面有下载,不用分~
还有一个关键就是,我这里使用到了广播,是用来让Seekbar动起来的
我把广播写在了服务里,向activity里传值

    Runnable updatesb = new Runnable() {        public void run() {            // 每100豪秒更新一次            Intent intent = new Intent();            intent.putExtra("mTime", player.getCurrentPosition());            intent.putExtra("mMaxTime", player.getDuration());            intent.setAction(MUSIC_TIME);            sendBroadcast(intent);            mPercentHandler.postDelayed(updatesb, 100);        }    };

activity里设置一个广播接收器

private int maxMusicTime = 0;    private int musicTime = 0;    private BroadcastReceiver MusicTime = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            String action = intent.getAction();            if (action != null) {                if (action.equals(MusicService.MUSIC_TIME)) {                    maxMusicTime = intent.getExtras().getInt("mMaxTime");                    musicTime = intent.getExtras().getInt("mTime");                    int sMax = seekBar_music.getMax();                    textView_now.setText(musicTime / 1000 + "秒");                    textView_total.setText(maxMusicTime / 1000 + "秒");                    seekBar_music.setProgress(musicTime * sMax / maxMusicTime);                }            }        }    };

使用广播不要忘了注册
而且在退出Activity时取消注册

// 注册广播    private void registerBoradcastReceiver() {        intentFilter = new IntentFilter();        intentFilter.addAction(MusicService.MUSIC_TIME);        registerReceiver(MusicTime, intentFilter);    }

本次关键代码就到此结束,希望大家一起进步,下面贴出下载源码地址

源码下载:http://download.csdn.net/detail/timeover_nice/8710179

0 0
原创粉丝点击