适用于Android的Upnp本机扩展-AIR



我们已经使用Adobe AIR进行了很长时间的Android项目,现在我们需要实现该功能来搜索网络中的Upnp设备。根据我的理解,不可能在AIR级别上实现此功能(如果我错了,请纠正我),因此需要Android原生扩展。我找不到任何可用的UPNP本机扩展,决定基于Cling库Cling UPNP Browser构建一个。我可以让它作为原生的Android应用程序运行,但当我试图将它转换为AIR原生扩展时,它根本不起作用。有人在Android-AIR上成功实现UPNP吗,任何帮助都将不胜感激。

在花了更多时间搜索其他替代方案之后,我终于使用CyberLink for Java实现了它。CyberLink图书馆的实施是非常直接的。对于任何计划为Android创建自己的UPNP本机扩展的人,以下是构建.jar本机扩展程序的过程。

  1. 将外部cyberlink.jar库包含到您的Android Java项目中
  2. 要开始搜索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;
    }
    
  3. 为您的Android编译.jar文件需要一些工作,因为Adobe AIR不理解我们包含的外部cyberlink.jar文件。当您尝试调试本机扩展时,您将收到错误日志:。。。班级组织。。。在方法中找不到ControlPoint">。为了使它发挥作用,您必须将所有.jar文件合并为一个文件。我们这里有两个选项:

    • 第一种方法:导出你的Andoird.jar文件,将扩展名更改为.zip,然后解压缩。然后将cyperlink.jar文件的.jar扩展名改为.zip,再解压缩。将源代码从cyperlink.jar文件夹复制到你的Android的.jar文件夹。最后,再次震击整个文件夹。

    • 第二种方法(更简单):使用谷歌的jarjar.jar(感谢Joe Ward)。

希望这能有所帮助。

最新更新