zoukankan      html  css  js  c++  java
  • android 高仿多米音乐播放器 (有图有码有真相)

    半年前写了个音乐播放器,仿的是多米的UI界面

    之前发表在eoe社区,今天也发到csdn上来

    不罗嗦,先上效果图:

    下面简单介绍下代码:

    MusicPlayer 播放音乐的核心类,该类有以下成员变量

    private final static String TAG = "MusicPlayer";

        

        private final String BROCAST_NAME = "com.genius.musicplay.brocast";

        

        private MediaPlayer mMediaPlayer;                   // 播放器对象

        

        private List<MusicData> mMusicFileList;               // 音乐文件列表

        

        private int mCurPlayIndex;                          // 当前播放索引

        

        private int mPlayState;                             // 播放器状态    

        

        private int mPLayMode;                              // 歌曲播放模式

        

        private Random mRandom;                     

        

        private Context mContext;

    其实该类就是将MediaPlayer做了一层封装,提供出一些播放音乐的相关操作如播放,暂停,上一曲,下一曲等等

    MusicService 是播放音乐的服务继承自service,MediaPlayer作为它的成员变量

    所以对MediaPlayer的操作就委托给了MusicService 

    ServiceManager,管理服务的对象,采用AIDL接口方式实现远程操作,对AIDL熟悉的童鞋你懂得

    private final static String TAG = "ServiceManager";

        private final static String SERVICE_NAME = "com.genius.service.musicservices";

        private Boolean mConnectComplete;

        

        private ServiceConnection mServiceConnection;

        private MusicConnect mMusicConnect;

        

        private IOnServiceConnectComplete mIOnServiceConnectComplete;

        

        private Context mContext;

    MusicConnect就是AIDL接口对象


    MusicData音乐歌曲的信息,由于要在AIDL接口传递,所以需要实现Parcelable接口

    public class MusicData implements Parcelable{

        public final static String KEY_MUSIC_DATA = "MusicData";

        

        private final static String KEY_MUSIC_NAME = "MusicName";

        private final static String KEY_MUSIC_TIME = "MusicTime";

        private final static String KEY_MUSIC_PATH = "MusicPath";

        private final static String KEY_MUSIC_ARITST = "MusicAritst";

        

        public String mMusicName;   

        public int  mMusicTime; 

        public String mMusicPath;

        public String mMusicAritst;

        

        public MusicData()

        {

            mMusicName = "";

            mMusicTime = 0;

            mMusicPath = "";

            mMusicAritst = "";

        }

        @Override

        public int describeContents() {

            // TODO Auto-generated method stub

            return 0;

        }

        @Override

        public void writeToParcel(Parcel dest, int flags) {

            // TODO Auto-generated method stub

            

            Bundle mBundle=new Bundle(); 

            

            mBundle.putString(KEY_MUSIC_NAME, mMusicName);

            mBundle.putInt(KEY_MUSIC_TIME, mMusicTime);

            mBundle.putString(KEY_MUSIC_PATH, mMusicPath);

            mBundle.putString(KEY_MUSIC_ARITST, mMusicAritst);

            dest.writeBundle(mBundle);

        }

        

         public static final Parcelable.Creator<MusicData> CREATOR = new Parcelable.Creator<MusicData>()

         {

            @Override

            public MusicData createFromParcel(Parcel source) {

                // TODO Auto-generated method stub

                MusicData Data = new MusicData();

                Bundle mBundle=new Bundle(); 

                mBundle = source.readBundle();

                Data.mMusicName = mBundle.getString(KEY_MUSIC_NAME);

                Data.mMusicTime = mBundle.getInt(KEY_MUSIC_TIME);

                Data.mMusicPath = mBundle.getString(KEY_MUSIC_PATH);

                Data.mMusicAritst = mBundle.getString(KEY_MUSIC_ARITST);

                

                

                return Data;

            }

            @Override

            public MusicData[] newArray(int size) {

                // TODO Auto-generated method stub

                return new MusicData[size];

            }

             

         };

    }

     音乐播放模式类

    public class MusicPlayMode {

        public static final int MPM_SINGLE_LOOP_PLAY = 0;   // 单曲循环

        

        public static final int MPM_ORDER_PLAY = 1;         // 顺序播放

        

        public static final int MPM_LIST_LOOP_PLAY = 2;     // 列表循环

        

        public static final int MPM_RANDOM_PLAY = 3;        // 随即播放

    }

    音乐播放状态类

    public class MusicPlayState {

        public static final int MPS_NOFILE = -1;            // 无音乐文件

        

        public static final int MPS_INVALID = 0;            // 当前音乐文件无效

        

        public static final int MPS_PREPARE = 1;            // 准备就绪

        

        public static final int MPS_PLAYING = 2;            // 播放中

        

        public static final int MPS_PAUSE = 3;              // 暂停

        

        

        public static final String PLAY_STATE_NAME = "PLAY_STATE_NAME";

        public static final String PLAY_MUSIC_INDEX = "PLAY_MUSIC_INDEX";

        public static final String MUSIC_INVALID = "MUSIC_INVALID";

        public static final String MUSIC_PREPARE = "MUSIC_PREPARE";

        public static final String MUSIC_PLAY = "MUSIC_PLAY";

        public static final String MUSIC_PAUSE = "MUSIC_PAUSE";

        public static final String MUSIC_STOP = "MUSIC_STOP";

        

    }

    MusicPlayActivity,应用程序主界面,该类代码也最多,不过里面细分了几个内部类,如UIManager里面就包含了很多控件对象以及对它们的操作

    private final static String TAG = "MusicPlayActivity";

        

        private final String BROCAST_NAME = "com.genius.musicplay.brocast";

        

        private final static int REFRESH_PROGRESS_EVENT = 0x100;

        

        private final static int ABOUT_DIALOG_ID = 1;

        

        private Handler mHandler;

        

        private UIManager mUIManager;

        

        private ServiceManager mServiceManager;                                 // 本地服务管理

        

        private MusicTimer mMusicTimer;                                         // 检测歌曲进度的定时器

        

        private MusicPlayStateBrocast mPlayStateBrocast;                        // 音乐播放状态的广播接收器

        private SDStateBrocast mSDStateBrocast;                                 // SD卡变化接收器

        

        private List<MusicData> m_MusicFileList;                              // 音乐列表

        

        private ListViewAdapter mListViewAdapter;                               

        

        private boolean mIsSdExist = false;                                     // SD卡是否存在

        private boolean mIsHaveData = false;                                    // 是否有音乐文件

        

        private int mCurMusicTotalTime = 0;

        

        private int mCurPlayMode = MusicPlayMode.MPM_LIST_LOOP_PLAY;

       

    MySlidingDrawer,自定义抽屉控件,属于UIManager的一部分

    MusicTimer,用于定时获取歌曲进度的定时器

    其它的东东就不多说了,有兴趣的童鞋自个儿下代码(有注释)看吧

    http://download.csdn.net/detail/geniuseoe2012/4373714

  • 相关阅读:
    visual basic VB.NET实例系列教程第三节(常用循环结构之乘法表与数列)
    visual basic VB.NET实例系列教程第二节(好玩又有趣的龟兔赛跑程序)
    visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)
    对DevSecOps的一点认识
    轻便的一句话反弹shell语句
    ActiveMQ 反序列化漏洞(CVE-2015-5254)复现
    《信息安全风险管理》梗概
    微信服务商分账功能开发(PHP)
    哈夫曼编码—文件的压缩与解压(Java)
    哈夫曼编码—数据压缩与解压(Java)
  • 原文地址:https://www.cnblogs.com/lance2016/p/5203040.html
Copyright © 2011-2022 走看看