赞
踩
在上一篇博客《Android DLNA投屏-基本原理》中,讲到了DLNA的一些基本原理。了解这些基本原理,对开发是很有帮助的。但仅仅依据原理去进行Android DLNA开发,是比较困难的。我们需要使用一些优秀的开源框架,这样能很大程度上提高开发效率,使得开发变得更简单。Android有如下几个用于DLNA开发的主流框架:
1. Cling. Cling是一个Java开源项目,开发者可直接编译源码生成jar包导入到Android项目中。目前Cling已停止维护,但这并不影响它的热度。
2. Platinum. Platinum是一个C库,它支持编译成多个平台的库,如Windows、Mac、IOS和Android等。但其编译流程相对来说比较复杂,Android使用Platinum开发需要用到jni。
3. CyberGarage. CyberGarage是一个Java Upnp开发包,开发者将其项目源码添加到Android工程当中,作为Android Library或者 Java Library直接使用。CyberGarage提供了jar包下载地址,但CyberGarage源码存在一些bug,需要对源码进行修改,因此不建议直接下载jar包。
由于原理相同,这些框架的使用方式都十分类似。本篇博客将介绍如何使用CyberGarage,进行Android DLNA投屏开发。使用Platinum和Cling的朋友,请参照github项目的文档指引进行开发。
1. 准备
由于Upnp是基于xml格式通信的,因此需要先下载xml解析包以获取xml解析支持, CyberGarage支持以下几种xml解析包:
jaxp (java自带,不用下载)
XmlPullParser (Android自带,不用下载)
选择其中一种解析包添加到项目中,CyberGarage会在解析xml时使用该解析包,上述解析包在CyberGarage中的使用优先级是从 4 到 1。
添加完xml解析包后,再将CyberGarage项目添加到Android工程中,就可以开始进行开发了。
2. ControlPoint
在上一篇博客《Android DLNA投屏-基本原理》中已提到,Android设备在投屏过程中主要扮演着控制点的角色。在CyberGarage项目中,与控制点相对应的类为ControlPoint类。只要创建并使用该类的实例,就能实现控制点的功能。
(1)初始化
实现初始化,只需要调用start方法即可,注意该方法要在子线程中调用:
ControlPoint controlPoint = new ControlPoint();
// 初始化
new Thread(new Runnable() {
public void run() {
controlPoint.start();
}
}).start();
(2)搜索设备
搜索设备的方法为search方法,但与start方法一样,需要在子线程中调用:
new Thread(new Runnable() {
public void run() {
controlPoint.start();
controlPoint.search();
}
}).start();
(3)设备通知监听
添加设备通知监听,只需实例化一个NotifyListener并实现其deviceNotifyReceived方法,然后与ControlPoint实例绑定:
controlPoint.addNotifyListener(new NotifyListener() {
@Override
public void deviceNotifyReceived(SSDPPacket packet) {
Log.i(TAG, "Got Notification from device, remoteAddress is" + packet.remoteAddress);
}
})
(4)搜索结果监听
添加设备通知监听,则需要实例化一个SearchResponseListener并实现其deviceSearchResponseReceived方法,然后与ControlPoint实例绑定:
controlPoint.addSearchResponseListener(new SearchResponseListener() {
@Override
public void deviceSearchResponse
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。