---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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"