Android自帶音樂播放器代碼分析(2)

要查看android自帶的Music播放器需要下載android源碼,具體方法在android源碼網站有介紹,自帶的Music播放器的代碼位於android4.0\packages\apps\Music中 為瞭查看代碼的方便可以將項目導入Eclipse查看,忽略提示的錯誤。
首先查看整個項目中的java類如下介紹各類的作用:
1.AlbumBrowserActivity此類繼承自ListActivity實現接口View.OnCreateContextMenuListener,   MusicUtils.Defs,    ServiceConnection該類的作用是顯示專輯的界面。
2.ArtistAlbumBrowserActivity此類繼承自ExpandableListActivity實現接口View.OnCreateContextMenuListener, MusicUtils.Defs, ServiceConnection該類的作用是顯示藝術傢列表,內部是ExpandableList。
3.AudioPreview此類繼承自Activity實現接口OnPreparedListener, OnErrorListener, OnCompletionListener此類提供界面當其他程序如彩信要加入音樂時提供音樂預覽的界面。
4.CheckableRelativeLayout此類繼承自RelativeLayout實現接口Checkable,這是一個自定義的佈局,佈局文件。
5.CreatePlaylist此類繼承自Activity該類提供創建播放列表的界面。
6.DeleteItems此類繼承自Activity該類提供刪除音樂時的提示界面主題是Dialog。
7.MediaAppWidgetProvider此類繼承自AppWidgetProvider,其作用是實現桌面的音樂插件,窗口小部件。
8.MediaButtonIntentReceiver此類繼承自BroadcastReceiver,此類提供對相應按鈕按下發送的廣播進行接收的機制,藍牙耳機。
9.MediaPickerActivity此類繼承自ListActivity實現接口MusicUtils.Defs。
10.MediaPlaybackActivity此類繼承自Activity實現接口MusicUtils.Defs,  View.OnTouchListener,  View.OnLongClickListener該類提供音樂播放的界面,用戶在該界面上可以點擊控制音樂的播放,暫停,前進和後退。
11.MediaPlaybackService此類繼承自Service此類提供音樂的播放服務,音樂的播放控制都在內部定義的。
12.MusicAlphabetIndexer此類繼承自AlphabetIndexer。
13.MusicBrowserActivity此類繼承自Activity實現接口 MusicUtils.Defs。
界面啟動時4個tab的選擇:
MusicBrowserActivity中,程序啟動入口函數。
activeTab = MusicUtils.getIntPref(this, "activetab", R.id.artisttab);
每次程序退出時,講記錄當前界面為哪一個tab選項,存儲到數據庫SharedPreferences中,當程序再次啟動時,從數據庫中獲取對應存儲的tab值。如果沒有,默認為activeTab = R.id.artisttab;
MusicUtils.activateTab(this, activeTab);
啟動對應tab的activity. intent.putExtra("withtabs", true);標記所啟動的activity有沒有tab選擇條。
在對應的四個應用程序界面的oncreate中,都有調用MusicUtils.updateButtonBar(this, R.id.xxxtab);
來更新界面是否需要顯示tab選擇條。
14.MusicPicker此類繼承自ListActivity,添加附件。
15.MusicUtils該類提供獲取音樂播放狀態的輔助方法,工具類。
16.PlaylistBrowserActivity此類繼承自View.OnCreateContextMenuListener,  MusicUtils.Defs此類用於顯示播放列表。
17.QueryBrowserActivity此類繼承自ListActivity實現接口MusicUtils.Defs, ServiceConnection,長按搜索。
18.RenamePlaylist此類繼承自Activity該類用於對音樂列表進行重命名。
19.RepeatingImageButton此類繼承自ImageButton該類實現長按某個圖片時 歌曲的快進、快退。
20.ScanningProgress此類繼承自Activity顯示當前掃描的進度,歌曲掃描。
21.SharedPreferencesCompat存儲上次使用時的某些播放器首選項的信息保存,開機時保留播放列表信息。
22.SortCursor此類繼承自AbstractCursor。
23.TouchInterceptor此類繼承自ListView,新建播放列表中,歌曲位置移動。
24.TrackBrowserActivity此類繼承自ListActivity 實現接口 View.OnCreateContextMenuListener,   MusicUtils.Defs,   ServiceConnection,歌曲界面。
25.VerticalTextSpinner此類繼承自View,
26.VideoBrowserActivity此類繼承ListActivity ,實現接口 MusicUtils.Defs。
27.WeekSelector此類繼承自Activity。
28. IMediaPlaybackService. aidl此文件中定義瞭IPC的接口,mService。
待解決:
29.AudioEffectControlPanel.java此類繼承ListActivity,選擇音效設置,低音增強,虛擬化,預設混響,均衡器   showEQPresetListDialog(){正常、古典、舞曲、平直、民歌、重金屬、嘻哈、爵士、流行、搖滾}
30.AudioEffectReceiver.java此類繼承BroadcastReceiver,
31.AudioPreviewStarter.java
32.LrcFileException.java 此類繼承 Exception,處理歌詞文件異常
33.LyricsBody.java 處理歌詞文件,對對歌詞進行處理,顯示歌詞
34.MusicLogUtils.java 該類提供獲取音樂播放狀態的Log輔助方法,Log工具類。
35.ScrollLrcView.java  此類繼承ScrollView,歌詞滾動顯示。
                            
                               
                    (系統自帶播放界面)                                                                (修改後的播放界面)
 
Audio_player_zwq.xml文件
 
整體佈局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/album_info"//定義id:album_info
    android:layout_width="match_parent"    android:layout_height="match_parent"
    android:orientation="vertical"android:background="#f0f0f0">
//頂部佈局:隨機播放,藝術傢名、歌曲名,repeat播放
//水平線性佈局,藝術傢名,歌曲名用垂直線性佈局
        <LinearLayout
            android:layout_width="match_parent"        android:layout_height="70dip"
            android:orientation="horizontal"       android:background="@drawable/top">
         <ImageButton
      android:id="@+id/shuffle"//隨機播放按鈕
            android:layout_width="wrap_content"            android:layout_height="wrap_content"
            android:layout_gravity="center"            android:layout_weight="1"
            android:background="#00000000"/>
        <LinearLayout
        android:layout_width="150dip"     android:layout_height="wrap_content"
        android:orientation="vertical"    android:layout_gravity="center"
        android:layout_weight="2"        android:paddingTop="5dip">
    <TextView
   android:id="@+id/artistname"//藝術傢名字
            android:textSize="16sp"         android:singleLine="true"
            android:ellipsize="end"        android:textStyle="bold"
            android:layout_gravity="center_horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
            <TextView
          android:id="@+id/albumname"//專輯名,在程序中設置 visibility為gone
          android:textSize="14sp"          android:singleLine="true"
          android:ellipsize="end"      android:layout_gravity="center_horizontal"
          android:layout_width="wrap_content"   android:layout_height="wrap_content" />
             <TextView
          android:id="@+id/trackname"//歌曲名
          android:textSize="20sp"         android:singleLine="true"
          android:ellipsize="end"          android:layout_gravity="center_horizontal"
          android:layout_width="wrap_content"   android:layout_height="wrap_content" />
    </LinearLayout>   
           <ImageButton android:id="@+id/repeat"//repeat按鈕
                android:layout_width="wrap_content"     android:layout_height="wrap_content"
                android:layout_gravity="center"        android:layout_weight="1"
                android:background="#00000000"/>
        </LinearLayout>
//定義佈局,加載id,控制進度條 可見/不可見
        <LinearLayout
 android:id="@+id/barvisible"      android:layout_width="match_parent"
      android:layout_height="wrap_content"  android:background="@drawable/background_c"
      android:orientation="vertical">
//半透明的 TextView      歌曲次序/總歌曲數
<TextView
android:id="@+id/ordertxt"android:layout_width="match_parent"
          android:layout_height="wrap_content"   android:orientation="horizontal"
          android:textSize="18sp"      android:paddingTop="2dip"
 android:paddingBottom="2dip"     android:textColor="#ffffffff"
          android:gravity="center_horizontal"      android:background="#2f0000ff"/>
       <ImageView
            android:id="@+id/album"    android:background="@drawable/album_border_large"
            android:layout_width="160dip"      android:layout_height="match_parent"
            android:layout_gravity="center_horizontal"      android:visibility="invisible"
            android:layout_marginTop="6dip"     android:layout_marginBottom="8dip"/>
<LinearLayout //定義的Seekbar 佈局 
android:id="@+id/seekbarlayout"android:orientation="vertical"
android:layout_width="match_parent"android:layout_height="wrap_content"
android:background="#2f0000ff">
     <SeekBar  //自定義SeekBar 
android:thumb="@layout/thumb" android:id="@android:id/progress"
android:maxHeight="2dip" android:minHeight="2dip"
android:layout_width="250dip"android:layout_height="wrap_content"
android:layout_marginTop="10dip"android:layout_gravity="center_horizontal"/>
   <LinearLayout
        android:layout_width="match_parent"       android:layout_height="wrap_content"
        android:orientation="horizontal"       android:paddingLeft="11dip"
        android:paddingRight="11dip"      android:paddingTop="0dip"
        android:paddingBottom="8dip">
     <TextView
    android:id="@+id/currenttime"  //歌曲播放時間
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="14sp"            android:textStyle="bold"
    android:shadowColor="#ff000000"          android:shadowDx="0"
    android:shadowDy="0"            android:shadowRadius="3"
    android:layout_gravity="bottom"        android:layout_weight="1"
android:layout_width="0dip"        android:paddingLeft="5dip"
android:layout_height="wrap_content" />
    <TextView     android:id="@+id/totaltime"//歌曲總時間
  android:textAppearance="?android:attr/textAppearanceMedium"
       android:textSize="14sp"          android:textStyle="bold"
            android:shadowColor="#ff000000"         android:shadowDx="0"
       android:shadowDy="0"         android:shadowRadius="3"
       android:gravity="right"         android:paddingRight="5dip"
       android:layout_gravity="bottom"        android:layout_weight="1"
       android:layout_width="0dip"       android:layout_height="wrap_content" /> 
            </LinearLayout>
    </LinearLayout>
</LinearLayout>
    <include layout="@layout/audio_player_common_zwq" />
</LinearLayout>
audio_player_common_zwq.xml文件
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <View
        android:layout_width="match_parent"        android:layout_height="1px"
        android:background="#ffffffff" />
        <LinearLayout
            android:id="@+id/btnlayout"
    android:orientation="vertical"    android:layout_width="match_parent"
    android:layout_height="105dip"    android:background="@drawable/bottom" >
    <LinearLayout
    android:id="@+id/media_button"        android:layout_width="match_parent"
    android:layout_height="wrap_content"    android:paddingTop="1dip"
    android:paddingBottom="1dip"    android:orientation="horizontal">
<TextView
           android:layout_gravity="bottom"         android:layout_weight="1"
          android:layout_width="0dip"           android:paddingLeft="5dip"
          android:layout_height="wrap_content" />       
        <LinearLayout
         android:layout_width="wrap_content"       android:layout_height="wrap_content"
         android:orientation="horizontal"         android:layout_gravity="bottom"
         android:layout_marginTop="3dip"       android:layout_marginBottom="5dip"
         android:gravity="center">
     <com.android.music.RepeatingImageButton     android:id="@+id/prev"  //上一曲按鈕
         android:background="#00000000"      android:layout_height="30dip"
         style="@android:style/MediaButton.Previous" />
//播放、暫停按鈕
     <ImageButton     android:id="@+id/pause"android:background="#00000000"   android:layout_height="30dip"      style="@android:style/MediaButton.Play" />
<com.android.music.RepeatingImageButton       android:id="@+id/next"
         android:background="#00000000"       android:layout_height="30dip"
         style="@android:style/MediaButton.Next" />
        </LinearLayout>
<TextView      android:layout_gravity="bottom"
            android:layout_weight="1"      android:layout_width="0dip"
            android:paddingLeft="5dip"     android:layout_height="wrap_content" />
   </LinearLayout>
<Button
android:id="@+id/curplaylist"//播放列表按鈕
         android:layout_width="200dip"
         android:layout_height="40dip"
         android:gravity="right|center_vertical"
        android:layout_gravity="center_horizontal"
         android:layout_marginTop="2dip"
    android:background="@drawable/list"       
    android:text="@string/listname_zwq"
    android:textColor="#ffffff"
    android:textSize="16sp"
    android:layout_marginBottom="15dip"
         adroid:paddingRight="60dip"/>
</LinearLayout>
</merge>

You May Also Like