MyMusic

来源:互联网 发布:javac编译java文件 编辑:程序博客网 时间:2024/05/21 14:02

昨天本来打算去健身房,然后想拷些歌曲,结果电脑上只有华为手机助手,坑爹的是没有文件传输或者音乐传输(只能传视频和图片),于是决定写一个传歌曲的小工具,检验一下最近三个月学的Android的基础知识。

一、版本:0.0.1

二、功能设计:1、通过TCP和服务器建立连接;

2、UI:功能按键:配置服务器,连接服务器,下载,获取歌曲列表

显示:服务器IP TextView,服务器端口 TextView,歌曲列表 ListView

歌曲列表的AdapterView:曲名,复选框

3、配置服务器:点击后弹出AlertDialog,输入服务器的IP和PORT,点击确定保存,点击取消退出。配置窗口关闭后在显示部分显示

4、连接服务器:点击后连接服务器,成功与否Toast提示

5、下载:遍历歌曲列表,对选择了的歌曲进行下载

6、获取歌曲列表:向服务器请求歌曲列表,同时刷新歌曲列表的ListView

三、代码设计:

说明:

1、因为Android现在不允许非UI线程更新UI,所以与网络相关的代码需要放到子线程类中

2、尽量使用MVP模式,把功能代码提出来作为M层,在UI只做结果的显示和参数的获取(V层),通过工具类来结合二者(P层)

3、待续

类:

1、全局常量类:

class MAIN_MESSAGE_TYPE{

int CONNECT_SUCCESS = 0x0001;//成功连接服务器

DOWNLOAD_PROGRESS = 0x0002;//下载进度0-100

MUSIC_LIST = 0x0003; //歌曲列表

}

2、主窗体:对应layout/main_activity

成员变量:

1)MyMusicUtil musicUtil;//P层类,提供连接服务器、获取列表、下载等接口,内部调用具体的实现类

2)Handler handlerForMusicUtil;//android.os.handler 和P层类的消息交互,用于从P层返回数据并显示

成员函数:

1)onClick配置服务器,生成AlertDialog并显示,更新UI,显示服务器IP和PORT;

2)onClick连接服务器,调用musicUtil.connectServer();

3)onClick获取歌曲列表,调用musicUtil.getMusicList(), 在handleMessage中处理获得的歌曲列表;

4)onClick下载,调用musicUtil.downloadMusic(String[] musicNames),在handleMessage中处理下载进度;

5)handleMessage:0x0001:连接成功,Toast提示;0x0002:通过歌曲名称更新对应的AdapterView的进度条;

0x0003:更新歌曲列表ListView

6)InitUI:初始化界面

3、MyMusicUtil

成员变量:

1)String serverIP; String serverPort;//服务器的IP和端口

2)String[] downloadMusicNames; //要下载的歌曲名称数组

3)Handler handlerFromUI; //主窗体的消息处理

4)Socket socketServer; //连接服务器的socket

5)final static int TIME_OUT = 5000; //网络连接超时

成员函数:

1)成员变量对应的get/set

2)public void connectServer():初始化socket,并启动线程连接socket,连接结果通过handler通知UI,结束后关闭线程

3)public void getMusicList():启动线程,发送获取指令到服务器,接收服务器返回的结果,并把结果通知UI,结束后关闭线程

4)public void downloadMusic(String[] musicName):启动线程,遍历数组,每次下载一首歌曲,下载进度通知UI,结束后关闭线程

4、网络库:暂时可以直接用代码,后期用第三方网络库

5、ServerConfigActivity:对应layout/server_config

没有成员变量,作为匿名内部类在主窗体的配置服务器中生成创建。

点击确定:获取IP和PORT并更新主窗体

点击取消:不做更新并退出窗口


以上是一个简单的设计,一个基本的框架,先实现功能,后期更新。

预计更新的点:1)主窗体修改为TabPage,第二页增加音乐播放功能

2)增加服务器文件夹浏览功能,目前APP不能选择在哪个文件夹下获取音乐文件


目前还需要做一个简单的交互服务器,对与服务器交互的数据要设计,暂时设计成消息用xml格式,音乐数据直接传输,比如下载的流程:

1)app --> server

<message type="download" step="1">

<music name="xxx"/>

 </message>

2)server --> app

<message type="download" step="2">

<music name="xxx" len=12345/> <!--单位:字节-->

</message>

3)app --> server

<message type="download" step="3">

<music name="xxx">

</message>

4)server开始发送数据,app写入到文件中

5)?:如何表示发送完成?不能关闭连接,也不能用超时,可想到的办法是弄一个数据传输socket,只用来发送数据,之前的socket用来发送message

以上的xml可以精简,也可以用json,获取歌曲列表应与此类似。

服务器的实现现在比较简单:1)固定歌曲文件夹;2)只处理少数几个连接;3)不要求高并发;4)不异步,所有消息通讯都用同步模式,因为是局域网

环境,不担心网络环境问题。










0 0
原创粉丝点击