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

这次的版本,做了许多的改变,增加了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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值