使用C#开发Android程序

清明节太冷了不想出去,正好试一试 Xamarin.Android 的生产力如何。实现了在线播放PC上的音乐,在此做个记录。

开发工具:Visual Studio 2017

首先,安装必须的插件

安装完成后新建Android项目

先不做任何修改,直接启动调试,没有报错,成功启动

说明环境配置没问题,下面正式开工

采用Socket实现Android设备和PC的通信。整个流程如下:

1、在PC上运行服务端,监听本地端口,作为服务器。Android设备通过IP地址和端口连接到服务器。

2、Android程序向服务器请求音乐文件列表

3、服务器返回音乐文件列表

4、Android程序向服务器请求播放音乐

5、服务器返回音乐文件字节流

6、Android程序播放字节流

通信协议实现2、3、4、5即可,由SOCKETPACKAGE实现需要的协议,将该结构体转为byte[]数组写入到Socket实现通信

public struct SOCKETPACKAGE

{

public SOCKETHEADER Header;//包头,16字节

public SOCKETBODY Body;//包身,1000字节

public SOCKETTAIL Tail;//包尾,8字节

}

public struct SOCKETHEADER

{

public ushort SocketHeader; //包头:0x55AA

public ushort Length; //有效数据长度

public PACKAGETYPE Type;//数据包类型

public uint Index; //数据包编号

public uint PackageCount; //数据包总数

}

public unsafe struct SOCKETBODY

{

public fixed byte Data[1000];//一次最多发送1000字节的有效数据

}

public struct SOCKETTAIL

{

public int FileSize; //有效数据总长度

public ushort UnKnow; //保留字段

public ushort SocketTail; //包尾:0xAA55

}

public enum PACKAGETYPE

{

UnKnown,//未知的数据类型

//客户端发送,服务端解析

GetFileList,//获取文件列表,Data字段无需赋值

PlayMusic,//播放音乐,Data字段为编码后的文件名

//服务端发送,客户端解析

FileList,//返回文件列表,Data字段为编码后的文件名,可能需要多次发送该数据包

Music//返回音乐文件字节流,需要多次发送该数据包

}

具体实现的代码不再过多展示,已上传到GitHub上,文后会附上地址。

运行效果如下图:

总结:使用C#开发Android程序效率还是很不错的,常用的库也支持的很好,C#里能够使用指针和结构体在解析数据这块相比Java还是很占优势的,用C#做一些简单的APP还是可以的。大型的程序也没法去验证。

开发中遇到的坑:

1、显示文件列表的是个ListView,数据源是SimpleAdapter,实例化SimpleAdapter的构造函数如下:

public SimpleAdapter(Context context, IList> data, int resource, string[] from, int[] to);

data对象类型为IList>,使用List> data作为参数编译没问题,但运行报错,使用List> data作为参数才能成功运行。

2、在线播放音乐给MediaPlayer设置数据源时可通过SetDataSource(MediaDataSource dataSource);这个接口实现边下边播,MediaDataSource是一个抽象类,需要自己实现这个类。

项目地址:

服务端:https://github.com/LittleDruid/MusicShareServer

客户端:https://github.com/LittleDruid/MusicShare

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180407G0VBJ400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券