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