天天看點

android 源碼 Music 學習過程(随筆版)(ing)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2013.01.10 下午

整體分析:

由一個包,27個檔案組成。

其中有7個activity分别由7個檔案組成,其中一個activity是以dialog形式顯示,它們是:

1. MusicBrowserActivity.java

程式的入口,由四個tab組成:browse_menu藝術家,albums_menu專輯,tracks_menu歌曲,playlists_menu播放清單

2.ArtistAlbumBrowserActivity.java

藝術家界面

3.AlbumBrowserActivity.java

專輯界面

4.TrackBrowserActivity.java

歌曲界面

5. PlaylistBrowserActivity.java

播放清單界面

6. MediaPlaybackActivity.java

正在播放界面

7.CreatePlayList.java

建立播放清單界面,一dialog的形式顯示

遇到的問題

1. 什麼是TAB,以及TAB相關的知識?

解: google一下得:

tab 其實是一個選線頁籤布局,依托于TabHost

。。。。。。

TabHost 對象用TabActivity.getTabHost()擷取。

暫時先了解這麼些吧。。。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2013.01.11 下午

1.android通訊機制 AIDL

一、在同一包下建一字尾為aidl檔案,

内容有引入所在的包,定義一個名稱和檔案名相同的接口,

接口裡寫明要提供服務的方法,并給參數注明in 還是out

二、 在同一包下建一繼承service類的類,實作aidl裡的所有方法

三、在AndroidManifest.xml 檔案中注冊 service

形如:

<service android:name="TestService" android:process=":remote" >
        <intent-filter>
            <action android:name="com.bravewly.ITestService" />
        </intent-filter>
    </service>
           

然後就可以調用了,基本上就是這個流程。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2013.02.03 下午

重新從入口類,即,MusicBrowserActivity.java 分析Music。

看完該類後,簡要總結一下該類的作用:

1. 該 Activity 其實沒有自己的view顯示,

主要是通過調用 MusicUtil.java 的 activateTab(Activity, int) 方法選擇啟動哪一個Activity

static void activateTab(Activity a, int id) {
        Intent intent = new Intent(Intent.ACTION_PICK);
        switch (id) {
            case R.id.artisttab:
                intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/artistalbum");
                break;
            case R.id.albumtab:
                intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/album");
                break;
            case R.id.songtab:
                intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/track");
                break;
            case R.id.playlisttab:
                intent.setDataAndType(Uri.EMPTY, MediaStore.Audio.Playlists.CONTENT_TYPE);
                break;
            case R.id.nowplayingtab:
                intent = new Intent(a, MediaPlaybackActivity.class);
                a.startActivity(intent);
                // fall through and return
            default:
                return;
        }
        intent.putExtra("withtabs", true);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// 參數含義是:如果所要啟動的activity已經啟動,
                                                        // 則finish掉其上的所有activity
        a.startActivity(intent);
        a.finish();

        /*
         *     該方法必須用于startActivity 和 finish 方法之後。
         *  該方法作用:第一個參數為第一個Activity離開時的動畫,第二參數為所進入的Activity的動畫效果
         */ 
        a.overridePendingTransition(0, 0);		
    }
           

分析時遇到的問題:見代碼注釋

2. 連接配接

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2013.03.01 下午

PS: 時間過的可真快,轉眼間已經是13年的三月份了。。。繼續更新。。。

剛剛分析delete原理的時候,碰到了一個新方法:

this.getResource().getQuantityString(int id, int quantity, Object... formatArgs) 

其中id對應的是xml裡的資源

quantity 則是一個int數值,

object 是參數的類型

對應的xml内容舉例如下:

<plurals name="NNNtracksdeleted">
        <!-- delete confirmation message for 1 song -->
        <item quantity="one">1 song was deleted.</item>
        <!-- delete confirmation message for 0 or more than 1 songs -->
        <item quantity="other"><xliff:g id="songs_to_delete">%d</xliff:g> songs were deleted.</item>
    </plurals>
           

如果quantity = 1 則對應傳回的string就是 1 song was deleted. 

否則就是“other”所對應的内容。

當然,quantity的值還有“two”  "three" "zero"