Android平台音乐播放器说明书 下载本文

内容发布更新时间 : 2024/5/18 10:35:49星期一 下面是文章的全部内容请认真阅读。

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 _histories=mdao.getHistories(); madapter.changData(_histories); } }

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