5.4.2 网络曲库
因为本应用程序借助的是Android虚拟机,所以用的是tomcat作为模拟网络歌曲的获得,在前面已经提到,实现已经把下载好的音乐文件放到了tomcat下了,在这里就不多说了。因为要使用tomcat,那就要知道本机的IP地址,点击“开始”,选择“运行”,输入“cmd”,在弹出的界面中,输入“ipconfig”就会知道本机的IP地址了,当然一定要插网线的,将获取的IP地址更新到com.tarena.service.db包下的HttpTools.java文件中的URI的地址上。
public static final String BASE_URL = \这样就可以连接到tomcat,从而模拟在通过网络获取歌曲了。启动tomcat后,网络曲库就会解析出网络上的歌曲,并且可对网络曲库中的歌曲进行下载,长按某歌曲,会后提示框“下载”,下载同时还会有广播提示,下载后,歌曲会添加到下载管理界面中,同时本机对为下载的歌曲有标示“未下载”,当此首歌已经下载过后,就会有标示“已下载”,让用户不再重复下载同一首歌曲。具体过程实现是首先通过输入流到tomcat,再解析tomcat下的音乐文件,获得音乐的所有属性,然后选择性的下载歌曲。如图5-18。
图5-18 网络曲库下载界面
5.4.3 下载管理
这个模块的设计是希望用户能知晓已下载的歌曲,显示下载的音乐的历史记录,对用户以往下载的歌曲作展示,同时每当用户下载一首歌曲的时候,在下载管理的音乐文件中会有一个实时的时间作为记录,用户下载歌曲的时间。代码实现如下: package com.tarena.client;
- 37 -
基于Android平台的手机音乐播放器的设计与实现
import java.util.ArrayList;
import com.tarena.adapter.HistoryAdapter; import com.tarena.entity.DownloadHistory; import com.tarena.service.db.HistoryDAO; import android.app.Activity; import android.os.Bundle;
import android.widget.ListView; /**
* @author 3gtarena
*音乐下载管理类,主要显示下载的音乐的历史记录
*/
public class ActivityDownload extends Activity { private ListView mlv;
private HistoryAdapter madapter; private HistoryDAO mdao; @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.layout_music_online); mdao=new HistoryDAO(this); setupView(); }
private void setupView(){
mlv=(ListView)findViewById(R.id.lvMusics); madapter=new HistoryAdapter(this, null); mlv.setAdapter(madapter); }
@Override
protected void onResume() {
// TODO Auto-generated method stub super.onResume();
ArrayList
- 38 -
效果如图5-19。
图5-19 下载管理界面
5.4.4 收藏管理
在音乐收藏中,会将用户要收藏的音乐收藏起来,当用户遇到喜爱的音乐,要把它放到指定一点,以便以后可以快速的寻找,这就需要有一个功能模块来实现用户的需求,这也是收藏管理模块的实现的意义。本模块可分为两个方面,一方面是在收藏组中的音乐的一些操作,包括播放、删除、移动、加添到播放列表等操作,另一方面是对收藏组的操作,包括播放、删除、清空、将组下的音乐文件添加到播放列表,部分设计代码如下:
private void setupView() {
m_elv = new ExpandableListView(this);
LayoutParams p = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); m_elv.setLayoutParams(p); setContentView(m_elv); // 显示所有分组
mitemDao = new MusicItemDao(this); mgroupDao = new MusicGroupDao(this);
- 39 -
基于Android平台的手机音乐播放器的设计与实现
}
madapter = new MusicFavAdapter(this, mgroupDao.getGroups()); m_elv.setAdapter(madapter); // 初始化dialog
etInput = new EditText(this);
mOptiondialog = new Builder(this).setTitle(\您的收藏\
.setIcon(R.drawable.btn_check_on_pressed).setMessage(\请输入收藏名\.setView(etInput).setCancelable(false)
.setPositiveButton(\确定\
@Override
public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub if (etInput.getText() != null) { String _title = etInput.getText().toString(); }
}
// 添加新的分组
mgroupDao.addGroup(_title);
mgroup = mgroupDao.getGroups(); madapter.changData(mgroup);
}).setNegativeButton(\取消\
/** 为收藏组添加上下文菜单
*/
private void addListener() {
m_elv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { ExpandableListContextMenuInfo _info = (ExpandableListContextMenuInfo)
menuInfo;
int _type = ExpandableListView .getPackedPositionType(_info.packedPosition);
menu.add(1, MENU_PLAY, 1, \播放\
menu.add(1, MENU_ADD_TO_PLAYLIST, 2, \添加到播放列表\// 按照对应的类型创建不同的菜单项
- 40 -
}
});
}
switch (_type) {
case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
menu.add(0, MENU_DELETEGROUP, 1, \删除本收藏组\menu.add(0, MENU_CLEARGROUP, 1, \清空本收藏\menu.setHeaderIcon(R.drawable.ic_tab_playlists_selected)
.setHeaderTitle(\操作\
break;
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
menu.add(1, MENU_DELETEITEM, 1, \删除收藏的音乐\menu.add(1, MENU_MOVETO, 1, \移动到\
menu.setHeaderIcon(R.drawable.ic_tab_playlists_selected)
.setHeaderTitle(\操作\
break; default: break; }
// 添加系统菜单,功能是为收藏添加新分组 @Override
public boolean onCreateOptionsMenu(Menu menu) { }
menu.add(0, 1, 1, \添加自定义收藏\return super.onCreateOptionsMenu(menu);
// 点击添加新分组选项的操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { case 1: etInput.setText(\ mOptiondialog.show(); break; default: break;
- 41 -