我们一直在使用Adobe AIR开发Android项目,现在我们需要实现该功能来搜索网络中的Upnp设备。根据我的理解,不可能在AIR级别上实现此功能(如果我错了请纠正我),因此需要Android原生扩展。我找不到任何UPNP Native Extension,并决定基于Cling库Cling UPNP Browser构建一个。我可以将其作为原生Android应用程序工作,但当我尝试将其转换为AIR原生扩展时,它根本不起作用。有没有人在Android上成功实现UPNP - AIR,任何帮助都会非常感激。
答案 0 :(得分:2)
在花费更多时间搜索其他替代方案之后,最后,我使用CyberLink For Java使其工作。讯连科技图书馆的实施非常直截了当。对于计划为Android创建自己的UPNP原生扩展的任何人,这里是构建.jar原生扩展的过程。
要开始搜索UPNP设备,您必须打开一个新线程:
new SearchingForUpnpTask().execute("Empty Param"); //You can specify your own param...
private class SearchingForUpnpTask extends AsyncTask<String, Void, DeviceList>{
protected DeviceList doInBackground(String... params){
ControlPoint ctrPoint = new ControlPoint();
ctrPoint.start("upnp:rootdevice");
DeviceList devList = ctrPoint.getDeviceList();
int nRootDevs = devList.size();
for (int n=0; n < nRootDevs; n++) {
Device dev = devList.getDevice(n);
String devName = dev.getFriendlyName();
System.out.println("[" + n + "] = " + devName);
}
...
return devList;
}
编译Android的.jar文件需要一些工作,因为Adobe AIR无法理解我们包含的外部cyberlink .jar文件。当您尝试调试本机扩展时,您将收到错误日志: ...类'org ...在方法中找不到ControlPoint'。为了使其工作,您必须将所有.jar文件合并为一个。我们有两个选择:
第一种方法:导出你的Andoird .jar文件,将扩展名更改为.zip然后解压缩。然后将cyperlink .jar文件的.jar扩展名更改为.zip,然后将其解压缩。将源cyperlink .jar文件夹中的源复制到Android的.jar文件夹中。最后,再次jar整个文件夹。
第二种方法(更简单):使用jarjar.jar from Google (thanks to Joe Ward)。
希望这有帮助。