日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android+多米音乐+自动播放,android 高仿多米音乐播放器

發(fā)布時(shí)間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android+多米音乐+自动播放,android 高仿多米音乐播放器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

半年前寫了個(gè)音樂播放器,仿的是多米的UI界面

之前發(fā)表在eoe社區(qū),今天也發(fā)到csdn上來

不羅嗦,先上效果圖:

下面簡(jiǎn)單介紹下代碼:

MusicPlayer?播放音樂的核心類,該類有以下成員變量

private?final?static?String?TAG?=?"MusicPlayer";

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

private?MediaPlayer?mMediaPlayer;???????????????????//?播放器對(duì)象

private?List?mMusicFileList;???????????????//?音樂文件列表

private?int?mCurPlayIndex;??????????????????????????//?當(dāng)前播放索引

private?int?mPlayState;?????????????????????????????//?播放器狀態(tài)

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

private?Random?mRandom;

private?Context?mContext;

其實(shí)該類就是將MediaPlayer做了一層封裝,提供出一些播放音樂的相關(guān)操作如播放,暫停,上一曲,下一曲等等

MusicService?是播放音樂的服務(wù)繼承自service,MediaPlayer作為它的成員變量

所以對(duì)MediaPlayer的操作就委托給了MusicService

ServiceManager,管理服務(wù)的對(duì)象,采用AIDL接口方式實(shí)現(xiàn)遠(yuǎn)程操作,對(duì)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接口對(duì)象

MusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicConnectMusicData?音樂歌曲的信息,由于要在AIDL接口傳遞,所以需要實(shí)現(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)用程序主界面,該類代碼也最多,不過里面細(xì)分了幾個(gè)內(nèi)部類,如UIManager里面就包含了很多控件對(duì)象以及對(duì)它們的操作

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;?????????????????????????????????????????//?檢測(cè)歌曲進(jìn)度的定時(shí)器

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,用于定時(shí)獲取歌曲進(jìn)度的定時(shí)器

其它的東東就不多說了,有興趣的童鞋自個(gè)兒下代碼(有注釋)看吧

總結(jié)

以上是生活随笔為你收集整理的android+多米音乐+自动播放,android 高仿多米音乐播放器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。