android+多米音乐+自动播放,android 高仿多米音乐播放器
半年前寫了個音樂播放器,仿的是多米的UI界面
之前發(fā)表在eoe社區(qū),今天也發(fā)到csdn上來
不羅嗦,先上效果圖:
下面簡單介紹下代碼:
MusicPlayer?播放音樂的核心類,該類有以下成員變量
private?final?static?String?TAG?=?"MusicPlayer";
private?final?String?BROCAST_NAME?=?"com.genius.musicplay.brocast";
private?MediaPlayer?mMediaPlayer;???????????????????//?播放器對象
private?List?mMusicFileList;???????????????//?音樂文件列表
private?int?mCurPlayIndex;??????????????????????????//?當(dāng)前播放索引
private?int?mPlayState;?????????????????????????????//?播放器狀態(tài)
private?int?mPLayMode;??????????????????????????????//?歌曲播放模式
private?Random?mRandom;
private?Context?mContext;
其實該類就是將MediaPlayer做了一層封裝,提供出一些播放音樂的相關(guān)操作如播放,暫停,上一曲,下一曲等等
MusicService?是播放音樂的服務(wù)繼承自service,MediaPlayer作為它的成員變量
所以對MediaPlayer的操作就委托給了MusicService
ServiceManager,管理服務(wù)的對象,采用AIDL接口方式實現(xiàn)遠程操作,對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接口對象
MusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicData?音樂歌曲的信息,由于要在AIDL接口傳遞,所以需要實現(xiàn)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?CREATOR?=?new?Parcelable.Creator()
{
@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;???//?單曲循環(huán)
public?static?final?int?MPM_ORDER_PLAY?=?1;?????????//?順序播放
public?static?final?int?MPM_LIST_LOOP_PLAY?=?2;?????//?列表循環(huán)
public?static?final?int?MPM_RANDOM_PLAY?=?3;????????//?隨即播放
}
音樂播放狀態(tài)類
public?class?MusicPlayState?{
public?static?final?int?MPS_NOFILE?=?-1;????????????//?無音樂文件
public?static?final?int?MPS_INVALID?=?0;????????????//?當(dāng)前音樂文件無效
public?static?final?int?MPS_PREPARE?=?1;????????????//?準(zhǔn)備就緒
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,應(yīng)用程序主界面,該類代碼也最多,不過里面細分了幾個內(nèi)部類,如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;?????????????????????????????????//?本地服務(wù)管理
private?MusicTimer?mMusicTimer;?????????????????????????????????????????//?檢測歌曲進度的定時器
private?MusicPlayStateBrocast?mPlayStateBrocast;????????????????????????//?音樂播放狀態(tài)的廣播接收器
private?SDStateBrocast?mSDStateBrocast;?????????????????????????????????//?SD卡變化接收器
private?List?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,用于定時獲取歌曲進度的定時器
其它的東東就不多說了,有興趣的童鞋自個兒下代碼(有注釋)看吧
總結(jié)
以上是生活随笔為你收集整理的android+多米音乐+自动播放,android 高仿多米音乐播放器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android viewpager动态加
- 下一篇: android中的标题栏是什么意思,An