版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> Android課程設(shè)計(jì)</p><p><b> **個(gè)人音樂(lè)播放器</b></p><p> 所在系(院): 數(shù)學(xué)與信息技術(shù)學(xué)院</p><p> 學(xué) 生 姓 名: </p><p> 指 導(dǎo) 教 師: </p><p> 研究起止日期:二○一二年二月至二○一
2、二年五月</p><p><b> 目 錄</b></p><p><b> 1、軟件產(chǎn)品介紹</b></p><p><b> 2、軟件功能</b></p><p><b> 3、軟件框圖</b></p><p>
3、 4、軟件介面及程序主要代碼</p><p><b> 5、設(shè)計(jì)總結(jié)</b></p><p><b> **個(gè)人音樂(lè)播放器</b></p><p><b> 1、軟件產(chǎn)品介紹</b></p><p> **音樂(lè)播放器是本地個(gè)人音樂(lè)播放器,是通過(guò)搜索SD卡,獲得本地的歌
4、曲并在“我的音樂(lè)”中顯示,對(duì)于有歌詞文件的歌曲在播放頁(yè)面也可顯示歌曲的歌詞,使用者也可以選擇自己經(jīng)常聽(tīng)或者喜歡聽(tīng)的歌曲加入的“我的收藏”中。**音樂(lè)播放器是個(gè)小程序,不會(huì)像其他網(wǎng)絡(luò)播放器一樣卡機(jī),用戶(hù)也可以使用音樂(lè)播放器下載音樂(lè)到本地,然后用**播放器進(jìn)行播放,也不會(huì)像網(wǎng)絡(luò)音樂(lè)播放器那樣產(chǎn)生大量的緩存。</p><p><b> 2、軟件功能</b></p><p>
5、; 2.1 首次使用該應(yīng)用會(huì)自動(dòng)掃描SD卡,獲得SD卡中的音樂(lè)及歌詞文件。</p><p> 2.2 需要更新“我的音樂(lè)”列表時(shí),可以再設(shè)置中進(jìn)行更新。</p><p> 2.3 對(duì)于經(jīng)常聽(tīng)或喜歡聽(tīng)的歌曲可以將其加入到“我的收藏”中。</p><p> 2.4 在“我的音樂(lè)”列表中可以將歌曲從列表中刪除。</p><p> 2.5
6、可以將“我的收藏”中將歌曲從列表中刪除。</p><p> 2.6 可以設(shè)計(jì)隨機(jī)播放、單曲循環(huán)或者列表循環(huán)。</p><p> 2.7 可以在設(shè)置中設(shè)置音量大小。</p><p> 2.8 在音樂(lè)播放界面可以暫停/播放歌曲。</p><p> 2.9 在音樂(lè)播放界面,在列表循環(huán)模式下點(diǎn)擊上一首/下一首可以切換到相應(yīng)歌曲;在隨機(jī)播放模式
7、下,則是隨機(jī)切換。</p><p> 2.10 在音樂(lè)播放界面,可以拖動(dòng)播放時(shí)間來(lái)實(shí)現(xiàn)快進(jìn)或后退。</p><p> 2.11 在音樂(lè)列表,點(diǎn)擊兩次返回鍵實(shí)現(xiàn)退出該播放器。</p><p> 2.12 在列表中之間點(diǎn)擊“退出”實(shí)現(xiàn)退出該音樂(lè)播放器。</p><p> 2.13 在菜單和功能列表頁(yè)面之間可以通過(guò)拖動(dòng)或者點(diǎn)擊按鈕實(shí)現(xiàn)切換。
8、</p><p> 2.14 可以后臺(tái)播放音樂(lè)。</p><p> 2.15 在音樂(lè)播放界面,對(duì)于有歌詞的歌曲會(huì)顯示其歌詞并根據(jù)歌曲位置進(jìn)行顯示。</p><p><b> 3、軟件框圖</b></p><p> 3.1 主界面流程圖</p><p> 3.2 音樂(lè)播放流程圖</p
9、><p><b> 3.3 時(shí)序圖</b></p><p> 4、軟件介面及程序主要代碼</p><p> 4.1 主界面(菜單列表)</p><p> 首先,這個(gè)主界面菜單可以通過(guò)點(diǎn)擊右上角這個(gè)按鈕收起,也可以自己手動(dòng)滑動(dòng)手機(jī)屏幕收起。</p><p> 主界面的代碼主要是MainActi
10、vity.java,布局文件主要是activity_main.xml。</p><p> 在MainActivity的主要是適配本地播放界面和收藏播放界面、菜單以及三個(gè)主界面的點(diǎn)擊事件,設(shè)置界面中的歌曲播放模式(隨機(jī)、單曲、列表循環(huán))設(shè)置、音量設(shè)置、更新本地音樂(lè)設(shè)置。</p><p> 4.1.1主要代碼分析:</p><p> 4.1.1.1 MainAct
11、ivity.java</p><p> 首先查看oncreate方法,oncreate方法中的代碼如下:</p><p><b> @Override</b></p><p> protected void onCreate(Bundle savedInstanceState) {</p><p> super.
12、onCreate(savedInstanceState);</p><p> requestWindowFeature(Window.FEATURE_NO_TITLE); //啟用窗體的擴(kuò)展特性</p><p> setContentView(R.layout.activity_main);</p><p> init();//實(shí)例化對(duì)象。</p&g
13、t;<p> setLinearClick();//設(shè)置點(diǎn)擊事件。包括跳轉(zhuǎn)到播放列表,以及,播放列表界面的點(diǎn)擊事件。</p><p> localAdapter();//適配本地界面</p><p> current_array=local_array;//設(shè)置當(dāng)前播放列表為本地。</p><p> shouAdapter();//適配收藏界面
14、</p><p> intents =new Intent(this,MusicServices.class);</p><p> startService(intents);//啟動(dòng)播放音樂(lè)的服務(wù)。</p><p> new Thread(){</p><p> public void run(){</p><p
15、> allLocalLrc=getMusic.getAllLrc(Environment.getExternalStorageDirectory()+"");//加載本地歌詞</p><p><b> }</b></p><p> }.start();</p><p><b> }</b>
16、</p><p> 在上面的代碼中使用Intent啟用播放音樂(lè)的service,啟用線程。然后看適配本地音樂(lè)列表的代碼:</p><p> //適配本地播放界面</p><p> private void localAdapter() {</p><p> // TODO Auto-generated method stub</
17、p><p> local_listView=(ListView) local_view.findViewById(R.id.listView1);</p><p> gm=new GetMusic(); </p><p> local_array=new ArrayList<MusicBeans>();</p><p>
18、 SharedPreferences sh=getSharedPreferences("sp",MODE_PRIVATE);</p><p> isFirstOpen=sh.getBoolean("isFirstOpen", true);</p><p> mdb=new MyDabaBase(this);</p><p&g
19、t; if(isFirstOpen){//如果為應(yīng)用第一次登錄,則從sd卡中的到音樂(lè)列表,同時(shí)插入到本地?cái)?shù)據(jù)庫(kù)。以后從本地?cái)?shù)據(jù)庫(kù)得到數(shù)據(jù),其實(shí)這也有一個(gè)弊端,就是音樂(lè)更新了,這個(gè)應(yīng)用可能會(huì)查不到。</p><p> local_array=gm.getLocalMusicArray(MainActivity.this);</p><p> mdb.setArray(local_arr
20、ay);</p><p> sh.edit().putBoolean("isFirstOpen", false).commit();</p><p> }else{//如果不為第一次登錄,則從數(shù)據(jù)庫(kù)得到數(shù)據(jù)</p><p> local_array=mdb.getArray();</p><p><b>
21、 }</b></p><p> LayoutInflater inf=getLayoutInflater();</p><p> localAdapter=new ListViewAdapter(MainActivity.this, inf, local_array);</p><p> local_listView.setAdapter(loca
22、lAdapter);</p><p> //改變顏色的點(diǎn)擊事件,也就是播放音樂(lè)的按鈕。</p><p> local_listView.setOnItemClickListener(new OnItemClickListener() {</p><p><b> @Override</b></p><p> pu
23、blic void onItemClick(AdapterView<?> parent, View view,</p><p> int position, long id) {</p><p> // TODO Auto-generated method </p><p> //用來(lái)改變顏色發(fā)送廣播</p><p> i
24、f(ListViewAdapter.linear2s==position){</p><p> ListViewAdapter.linear2s=-1;</p><p> localAdapter.notifyDataSetChanged();</p><p> SendBroad.sendPaseBrd(MainActivity.this, current_
25、array.get(position).getUrl());</p><p> MainActivity.current_positin=-1;</p><p><b> }else{</b></p><p> ListViewAdapter.linear2s=position;</p><p> localAd
26、apter.notifyDataSetChanged();</p><p> if(ShouListViewAdapter.clickChanged!=-1){</p><p> shou_adapter.updateOneView(shou_listView, ShouListViewAdapter.clickChanged);</p><p>
27、ShouListViewAdapter.clickChanged=-1;</p><p><b> }</b></p><p> setCurrentList(Constant.LOCAL);</p><p> current_positin=position;</p><p> SendBroad.sendPl
28、ayBrd(MainActivity.this, current_array.get(current_positin).getUrl());}}});}</p><p> 在上面的代碼中最重要的是發(fā)送廣播的,改變界面,實(shí)現(xiàn)滑到或按鈕實(shí)現(xiàn)界面的切換的代碼</p><p><b> /**</b></p><p> * 根據(jù)條件,滑動(dòng)
29、滑塊,改變界面。</p><p><b> */</b></p><p> public void moveHsv() {</p><p> // TODO Auto-generated method stub</p><p> if(moveFlag){//在主界面,滑塊往左滑,露出菜單界面。</p>
30、;<p> hsv.smoothScrollBy(-slideMenu_linear.getMeasuredWidth(), 0);</p><p><b> }else{</b></p><p> hsv.smoothScrollBy(slideMenu_linear.getMeasuredWidth(), 0);//在菜單界面,滑塊往右滑,露出
31、主界面。</p><p><b> }</b></p><p> moveFlag=!moveFlag;</p><p><b> }</b></p><p> //改變界面,構(gòu)建hsv因?yàn)椴季质荈rameLayout,所以他是第二層,</p><p> publi
32、c void setHsv(View v) {</p><p> hsv_linear.removeAllViews();//移除所有的View</p><p> int leftWidth = slideMenu_linear.getMeasuredWidth();//得到左面的寬度</p><p> int height = slideMenu_linea
33、r.getMeasuredHeight();</p><p> int width = hsv.getMeasuredWidth();//得到屏幕的寬度</p><p> hsv_linear.addView(textView, leftWidth, height);//增加一個(gè)透明的textView</p><p> hsv_linear.addView
34、(v, width, height);//增加一個(gè)播放列表</p><p> hsv.setBtnWidth(width - leftWidth);</p><p><b> }</b></p><p> 4.1.1.1 布局文件代碼</p><p> <FrameLayout xmlns:android=
35、"http://schemas.android.com/apk/res/android"</p><p> xmlns:tools="http://schemas.android.com/tools"</p><p> android:layout_width="match_parent"</p><p&g
36、t; android:layout_height="match_parent"</p><p> tools:context=".MainActivity" ></p><p> <LinearLayout </p><p> android:id="@+id/linearall"<
37、;/p><p> android:layout_height="match_parent"</p><p> android:layout_width="match_parent"</p><p> android:orientation="horizontal"></p><p
38、> <LinearLayout </p><p> android:id="@+id/linearall1"</p><p> android:layout_height="match_parent"</p><p> android:layout_width="match_parent"
39、;</p><p> android:layout_weight="1"</p><p> android:background="#000000"> </p><p> <ScrollView </p><p> android:layout_width="
40、match_parent"</p><p> android:layout_height="match_parent"</p><p> android:layout_weight="1"</p><p><b> > </b></p><p> &l
41、t;LinearLayout </p><p> android:layout_width="match_parent"</p><p> android:layout_height="match_parent"</p><p> android:orientation="vertical"</
42、p><p> android:layout_weight="1"> </p><p> ............</p><p> <ImageView android:id="@+id/line3"</p><p> android:layout_wi
43、dth="match_parent"</p><p> android:layout_height="wrap_content"</p><p> android:background="@drawable/list_line"/></p><p> <LinearLayout </
44、p><p> android:id="@+id/linearLayout7"</p><p> android:layout_height="47dp"</p><p> android:layout_width="match_parent"</p><p> android:o
45、rientation="horizontal"</p><p> android:gravity="clip_vertical"</p><p> android:paddingLeft="15dp"</p><p> android:paddingRight="5dp"</
46、p><p> android:background="@drawable/background_player_bar"</p><p><b> ></b></p><p> <ImageView </p><p> android:id="@+id/image7"
47、</p><p> android:layout_height="wrap_content"</p><p> android:layout_width="wrap_content"</p><p> android:layout_gravity="center_vertical"</p>
48、<p> android:background="@drawable/navigation_quit"</p><p><b> /></b></p><p> <TextView </p><p> android:id="@+id/textView7"</p&g
49、t;<p> android:layout_height="wrap_content"</p><p> android:layout_weight="1"</p><p> android:textSize="22dp"</p><p> android:textColor=&quo
50、t;#FFFFFF"</p><p> android:layout_width="wrap_content" </p><p> android:gravity="center"</p><p> android:paddingRight="35
51、dp"</p><p> android:layout_gravity="center"</p><p> android:text="退出"/> </p><p> </LinearLayout> </p><p> &l
52、t;/LinearLayout></p><p> </ScrollView></p><p> </LinearLayout></p><p><b> .........</b></p><p> </LinearLayout></p><p>
53、; <com.example.imusic.MyHz</p><p> android:id="@+id/hzv"</p><p> android:layout_width="match_parent"</p><p> android:layout_height="match_parent"
54、;</p><p> android:scrollbars="none"</p><p> android:fadingEdge="none"</p><p> android:fillViewport="true"</p><p><b> ></b&
55、gt;</p><p> <LinearLayout </p><p> android:id="@+id/hzv_linear"</p><p> android:layout_width="match_parent"</p><p> android:layout_height=&qu
56、ot;match_parent"</p><p> android:orientation="horizontal"</p><p><b> ></b></p><p> </LinearLayout></p><p> </com.example.imus
57、ic.MyHz></p><p> </FrameLayout></p><p> 布局文件最外面采采用幀布局(層布局)FramLayout,接下來(lái)是多個(gè)LinearLayout嵌套的布局,其中還嵌套有ScrollView滾動(dòng)條布局和imageView、ImageButton的控件和布局,最后的com.example.imusic.MyHz是自定義的一個(gè)view。這個(gè)
58、自定的代碼如下:</p><p><b> /**</b></p><p> * 一個(gè)控制焦點(diǎn)的方法,一個(gè)構(gòu)造方法,一個(gè)控制滑塊變化的方法;</p><p><b> * 界面的總體框架</b></p><p> * @author Administrator</p><
59、p><b> *</b></p><p><b> */</b></p><p> public class MyHz extends HorizontalScrollView{</p><p> 一個(gè)繼承自HorizontalScrollView,HorizontalScrollView是用于設(shè)置水平滾動(dòng)條
60、</p><p><b> /** 總寬度*/</b></p><p> private int sumWidth;</p><p> /** 右邊側(cè)條的寬度*/</p><p> private int btnWidth;</p><p> public MyHz(Context co
61、ntext, AttributeSet attrs) {</p><p> super(context, attrs);</p><p> // TODO Auto-generated constructor stub</p><p><b> }</b></p><p><b> /**</b&
62、gt;</p><p> * 解決焦點(diǎn)的問(wèn)題。</p><p><b> */</b></p><p><b> @Override</b></p><p> public boolean onTouchEvent(MotionEvent ev) {</p><p>
63、 // TODO Auto-generated method stub</p><p> //獲取到屏幕的寬度</p><p> sumWidth = getMeasuredWidth();</p><p><b> //點(diǎn)擊的偏移量</b></p><p> int currentOffset = (int)
64、 ev.getRawX();</p><p> //滑塊滑動(dòng)的偏移量</p><p> int offset = computeHorizontalScrollOffset();</p><p> if (offset == 0) {</p><p> if (currentOffset <= sumWidth - btnWid
65、th) {</p><p> return false;//并沒(méi)有消耗此次觸摸事件</p><p><b> }</b></p><p><b> }</b></p><p> return super.onTouchEvent(ev);//里面有滑動(dòng)的效果控制</p><
66、;p><b> }</b></p><p> 下面這段代碼是實(shí)現(xiàn)觸屏滑動(dòng)的效果</p><p><b> /**</b></p><p> * 自己滑動(dòng)時(shí)變化moveFlag,使點(diǎn)擊事件的時(shí)候不出錯(cuò)。</p><p> * 滑塊變化時(shí)調(diào)用這個(gè)方法。</p><p&
67、gt;<b> */</b></p><p><b> @Override</b></p><p> protected void onScrollChanged(int l, int t, int oldl, int oldt) {</p><p> // TODO Auto-generated method s
68、tub</p><p> super.onScrollChanged(l, t, oldl, oldt);</p><p> if(l==0){//在菜單界面,滑塊在左面。</p><p> MainActivity.moveFlag=false;</p><p> }else if(l==sumWidth-btnWidth){<
69、;/p><p> //在主界面,滑塊在右面。</p><p> MainActivity.moveFlag=true;</p><p><b> }</b></p><p><b> }</b></p><p> public void setBtnWidth(int
70、btnWidth){</p><p> this.btnWidth = btnWidth;</p><p><b> }</b></p><p><b> }</b></p><p> 4.2 “我的音樂(lè)”列表界面</p><p> 4.2.1 實(shí)現(xiàn)“我的音樂(lè)”列表
71、的代碼主要是GetMusic.java,主要的布局文件為my_local.xml。其主要代碼如下:</p><p><b> /**</b></p><p> * 從本地的SD卡中獲得本地音樂(lè)列表,獲得所有歌詞文件,以及和歌曲配對(duì)歌詞文件</p><p> * @author Administrator</p><p&
72、gt;<b> *</b></p><p><b> */</b></p><p> public class GetMusic {</p><p> ArrayList<MusicBeans> array=new ArrayList<MusicBeans>();</p>&l
73、t;p> public ArrayList<MusicBeans> getLocalMusicArray(Context context){</p><p> Cursor cursor=context.getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, Medi
74、aStore.Audio.Media.TITLE);</p><p> cursor.moveToFirst(); //將指針移到第一條數(shù)據(jù)上</p><p> while(!cursor.isAfterLast()){ </p><p> MusicBeans music=new MusicBeans();</p><p> mus
75、ic.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));</p><p> music.setDuration(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));</p
76、><p> music.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));</p><p> music.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALB
77、UM)));</p><p> music.setUrl(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));</p><p> music.setWhichMusic(Constant.LOCAL);</p><p> cursor.moveToNex
78、t();</p><p> array.add(music);</p><p><b> }</b></p><p> return array;</p><p><b> }</b></p><p> 4.2.2刪除/收藏歌曲主要代碼在ListViewAdapte
79、r.java中實(shí)現(xiàn)。</p><p><b> //收藏事件</b></p><p> vh.adp_linear_shou.setOnClickListener(new OnClickListener() {</p><p><b> @Override</b></p><p> publ
80、ic void onClick(View v) {</p><p> // TODO Auto-generated method stub</p><p> if(cdb.select_if_music(array.get(position).getUrl())){</p><p> Toast.makeText(context, "《"+
81、array.get(position).getTitle()+"》已經(jīng)收藏過(guò)了。", Toast.LENGTH_SHORT).show();</p><p><b> }else{</b></p><p> cdb.addMusic(array.get(position));</p><p> Toast.makeTe
82、xt(context, "《"+array.get(position).getTitle()+"》收藏成功。", Toast.LENGTH_SHORT).show();</p><p> if(MainActivity.current_array.get(0).getWhichMusic()==2){//如果收藏界面的音樂(lè)在播放,那么就更新當(dāng)前播放列表,把新增加的
83、歌曲加到當(dāng)前播放列表中。</p><p> MainActivity.current_array=cdb.getArrayList();</p><p><b> }</b></p><p> //刪除的點(diǎn)擊事件,從數(shù)據(jù)庫(kù)刪除,以及從當(dāng)前列表刪除。</p><p> vh.adp_linear_delete.se
84、tOnClickListener(new OnClickListener() {</p><p><b> @Override</b></p><p> public void onClick(View v) {</p><p> // TODO Auto-generated method stub</p><p>
85、; mdbs.decete(array.get(position).getUrl());</p><p> array.remove(position);</p><p> if(linear2s!=-1){//如果當(dāng)前列表正在播放</p><p> if(linear2s==position){//如果刪除的是當(dāng)前播放音樂(lè)</p><p
86、> SendBroad.sendPaseBrd(context, MainActivity.current_array.get(MainActivity.current_positin).getUrl());</p><p> MainActivity.current_positin=-1;</p><p> linear2s=-1;</p><p>&
87、lt;b> }</b></p><p> else if(linear2s>position){//如果刪除的音樂(lè)在正在播放的音樂(lè)的上面,則改變顏色,以及當(dāng)前播放的列表</p><p> linear2s--;</p><p> MainActivity.current_positin=linear2s;</p><
88、;p> MainActivity.current_array=array;</p><p><b> }</b></p><p><b> }</b></p><p> notifyDataSetChanged();</p><p><b> }</b><
89、/p><p><b> });</b></p><p> 4.3 “我的收藏”音樂(lè)列表界面</p><p> 下是正在播放歌曲名字的顏色</p><p> 4.3.1收藏界面的代碼主要是ShouListViewAdapter.java,內(nèi)容與“我的音樂(lè)”界面相仿,在“我的收藏”中只有取消收藏的按鈕,即后面的愛(ài)心按鈕。
90、布局是my_shou.xml。</p><p> 4.3.2 改變正在播放歌曲名字的顏色的代碼</p><p> //設(shè)置播放歌曲的顏色。</p><p> if(linear2s==position){</p><p> vh.tv1.setTextColor(context.getResources().getColor(R.co
91、lor.green));</p><p> vh.tv2.setTextColor(context.getResources().getColor(R.color.green));</p><p><b> }else{</b></p><p> vh.tv1.setTextColor(context.getResources().get
92、Color(R.color.black));</p><p> vh.tv2.setTextColor(context.getResources().getColor(R.color.black));</p><p><b> }</b></p><p> 4.4 音樂(lè)播放界面</p><p> 音樂(lè)播放界面的
93、主要代碼是PlayActivity.java,布局文件主要是activity_play.xml。音樂(lè)播放界面的主要功能是加載歌詞,顯示歌曲的播放時(shí)間和歌曲長(zhǎng)度,實(shí)現(xiàn)歌曲的暫停/播放,上一首/下一首歌曲的切換、歌曲的快進(jìn)/后退等功能。因?yàn)閮煞N播放列表都肯呢過(guò)跳轉(zhuǎn)到這個(gè)界面,而兩種界面到這個(gè)界面的效果相同,也就是說(shuō),這個(gè)界面的處理對(duì)象是一樣的。所以在主界面建立了當(dāng)前播放類(lèi)別和當(dāng)前音樂(lè)的位置,在這里只要對(duì)當(dāng)前的音樂(lè)處理就好了。</p&g
94、t;<p> 4.4.1 service主要代碼</p><p><b> /**</b></p><p> * 服務(wù)的廣播,用來(lái)接收消息,是播放,停止,還是暫?;蜷_(kāi)始。</p><p><b> */</b></p><p> class MyBroadCast exten
95、ds BroadcastReceiver{</p><p><b> @Override</b></p><p> public void onReceive(Context context, Intent intent) {</p><p> // TODO Auto-generated method stub</p>&
96、lt;p> String action=intent.getAction();</p><p> if(action.equals(Constant.PLAY)){//主界面?zhèn)鱽?lái)的,播放音樂(lè)通知?;蛘卟シ乓魳?lè)傳來(lái)的,下一首,上一首。</p><p> playMusic(intent.getStringExtra("path"));</p>&
97、lt;p> }else if(action.equals(Constant.PASE)){//主界面?zhèn)鱽?lái)的,停止播放的通知。</p><p> paseMusic();</p><p> }else if(action.equals(Constant.PLAY_ACTIVITY)){//播放音樂(lè)界面?zhèn)鱽?lái)的暫?;蛘卟シ磐ㄖ?。</p><p> if(in
98、tent.getBooleanExtra("stop", true)){//暫停通知</p><p> if(mp.isPlaying()){</p><p> progress=mp.getCurrentPosition();</p><p> mp.pause();</p><p><b> } }&
99、lt;/b></p><p> else{//暫停后播放通知</p><p> mp.start();</p><p> MyThread myThread=new MyThread();</p><p> Thread td=new Thread(myThread);</p><p> td.
100、start();</p><p><b> } }}</b></p><p><b> //播放音樂(lè)</b></p><p> private void playMusic(String string) {</p><p> // TODO Auto-generated method stu
101、b</p><p> mp.reset();</p><p><b> try {</b></p><p> mp.setDataSource(string);</p><p> mp.prepare();</p><p> mp.start();</p><p>
102、; MyThread myThread=new MyThread();</p><p> Thread td=new Thread(myThread);</p><p> td.start();</p><p> } catch (IllegalArgumentException e) {</p><p> // TODO Auto
103、-generated catch block</p><p> e.printStackTrace();</p><p> } catch (SecurityException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();&
104、lt;/p><p> } catch (IllegalStateException e) {</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> } catch (IOException e) {</p><
105、;p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> //停止音樂(lè)</b>&
106、lt;/p><p> private void paseMusic() {</p><p> // TODO Auto-generated method stub</p><p> if(mp.isPlaying()){</p><p> mp.pause();</p><p><b> }</b
107、></p><p><b> }</b></p><p><b> }</b></p><p> 上一首/下一首對(duì)應(yīng)的service代碼</p><p> //播放的歌曲播放完后調(diào)用這個(gè)方法,播放下一首,同時(shí)改變播放的顏色;</p><p> mp.setOn
108、CompletionListener(new OnCompletionListener() {</p><p><b> @Override</b></p><p> public void onCompletion(MediaPlayer mp) {</p><p> // TODO Auto-generated method stub
109、</p><p> //根據(jù)改變當(dāng)前播放音樂(lè)的位置,來(lái)改變播放的音樂(lè)。</p><p> switch (MainActivity.current_shezhi_play) {</p><p> case 0://順序循環(huán)播放</p><p> MainActivity.current_positin++;</p>&l
110、t;p> if(MainActivity.current_positin>MainActivity.current_array.size()-1){</p><p> MainActivity.current_positin=0;}</p><p><b> break;</b></p><p> case 1://單曲循環(huán)
111、</p><p><b> break;</b></p><p> case 2://隨機(jī)播放</p><p> MainActivity.current_positin=(int) (Math.random()*(MainActivity.current_array.size()));</p><p> bre
112、ak;</p><p><b> default:</b></p><p><b> break;}</b></p><p> 4.4.2 加載歌詞代碼</p><p> if(MainActivity.allLocalLrc==null){</p><p>
113、; Toast.makeText(getApplicationContext(), "本地歌詞尚未加載完畢", Toast.LENGTH_SHORT).show();</p><p><b> }else{</b></p><p> String path=getMusic.getlocal_lrc(MainActivity.current_
114、array.get(MainActivity.current_positin).getTitle(), MainActivity.current_array.get(MainActivity.current_positin).getArtist(), MainActivity.allLocalLrc);</p><p> if(path!=""){//如果本地有歌詞設(shè)置歌詞</p>
115、;<p><b> try {</b></p><p> gcReader.read(path);</p><p> gcView.setList(gcReader.getList());</p><p> hd.post(r);</p><p> } catch (IOException e)
116、{</p><p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p><b> }}</b></p><p> else{//如果本地沒(méi)有歌詞,則設(shè)置一下,設(shè)置數(shù)據(jù)為空</p><p> g
117、cView.setList(null);}}</p><p><b> 4.5 設(shè)置界面</b></p><p> 這是正在更新在線列表時(shí)的按鈕顯示,默認(rèn)情況下按鈕是“更新本地音樂(lè)”點(diǎn)擊之后即可更新“我的音樂(lè)”列表。此按鈕的代碼在4.2.1中已做了說(shuō)明。</p><p> AndroidMainfest.xml</p>
118、<p> <?xml version="1.0" encoding="utf-8"?></p><p> <manifest xmlns:android="http://schemas.android.com/apk/res/android"</p><p> package="com.
119、example.imusic"</p><p> android:versionCode="1"</p><p> android:versionName="1.0" ></p><p><b> <uses-sdk</b></p><p> andr
120、oid:minSdkVersion="8"</p><p> android:targetSdkVersion="12" /></p><p> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <
121、;/p><p> 允許掛載和反掛載文件系統(tǒng)可移動(dòng)存儲(chǔ)</p><p> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/></p><p> 可以讀寫(xiě)sdcard,包括其他storage</p><p> &
122、lt;application</p><p> android:allowBackup="true"</p><p> android:icon="@drawable/mussss"</p><p> android:label="@string/app_names"</p><p
123、> android:theme="@style/AppTheme" ></p><p><b> <activity</b></p><p> android:name="com.example.imusic.MainActivity"</p><p> android:labe
124、l="@string/app_names" ></p><p> <intent-filter></p><p> <action android:name="android.intent.action.MAIN" /></p><p> <category android:name=
125、"android.intent.category.LAUNCHER" /></p><p> </intent-filter></p><p> </activity></p><p> <service android:name="com.example.MusicService.MusicS
126、ervices" ></p><p> </service></p><p><b> <activity</b></p><p> android:name="com.example.imusic.PlayActivity"</p><p> android
127、:label="@string/title_activity_plays" ></p><p> </activity></p><p> </application></p><p> </manifest></p><p><b> 5、設(shè)計(jì)總結(jié)</b&
128、gt;</p><p> 雖然只是做了一個(gè)簡(jiǎn)單的android音樂(lè)播放器,但是確實(shí)是收獲頗多。我所做的設(shè)計(jì)功能不算強(qiáng)大,但是在這個(gè)應(yīng)用程序中用到了這學(xué)期所講的大部分知識(shí)點(diǎn),包括用戶(hù)界面布局、Intent、廣播消息、Service、提示消息Toast、數(shù)據(jù)存儲(chǔ)與訪問(wèn)、線程等知識(shí)點(diǎn)。我更進(jìn)一步清楚了android </p><p> 工程的框架及設(shè)計(jì)的步驟,以及每個(gè)文件的作用,掌握了一些V
129、iew 類(lèi)的方法,比如實(shí)現(xiàn)界面的滑動(dòng)的效果,同時(shí)也學(xué)到了更多的界面設(shè)計(jì)的方法,在設(shè)計(jì)過(guò)程中難免會(huì)遇到問(wèn)題,在應(yīng)用程序一步一步的完善中會(huì)遇到各種各樣的問(wèn)題,在這個(gè)過(guò)程中,應(yīng)該學(xué)到的是解決問(wèn)題的方法和編程的方法,現(xiàn)在解決問(wèn)題的途徑非常廣泛,通過(guò)上網(wǎng)就可以解決我們的很多問(wèn)題,在設(shè)計(jì)過(guò)程中對(duì)于android編程有很大的感觸,android程序應(yīng)該沒(méi)完成一個(gè)功能就測(cè)試一下功能是否可以執(zhí)行,因?yàn)橐粋€(gè)小小的android程序涉及到很多的功能,一個(gè)小小
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- 音樂(lè)播放器課程設(shè)計(jì)
- 音樂(lè)播放器課程設(shè)計(jì) (2)
- eda課程設(shè)計(jì)—音樂(lè)播放器
- java課程設(shè)計(jì)音樂(lè)播放器
- 基于java的音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- 單片機(jī)音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- 單片機(jī)音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- 基于qt的音樂(lè)播放器課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)---java音樂(lè)播放器
- c_課程設(shè)計(jì)報(bào)告-- c#音樂(lè)播放器
- 基于as3.0的音樂(lè)播放器設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 基于安卓的音樂(lè)播放器開(kāi)發(fā)-畢業(yè)論文
- 基于安卓平臺(tái)的音樂(lè)播放器設(shè)計(jì)與開(kāi)發(fā)-畢業(yè)設(shè)計(jì)
- mp3音樂(lè)播放器軟件課程設(shè)計(jì)報(bào)告(mfc)
- 基于單片機(jī)音樂(lè)播放器課程設(shè)計(jì)
- 嵌入式系統(tǒng)課程設(shè)計(jì)---音樂(lè)播放器
- 課程設(shè)計(jì)(論文)基于fpga的音樂(lè)播放器設(shè)計(jì)
- 嵌入式系統(tǒng)課程設(shè)計(jì)音樂(lè)播放器
- 基于java的音樂(lè)播放器的設(shè)計(jì)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論