苹果的Bonjour为Android [英] apple bonjour for android

查看:460
本文介绍了苹果的Bonjour为Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一个苹果的Bonjour为Android。 是否有一个罐子提交您的吗?

我GOOGLE了一个苹果的Bonjour应用程序,我发现Jmdns应用 HTTP://home.heeere .COM /高科技androidjmdns.html

但运行在 DEMO时应用程序,一个错误出现在启动该应用程序。这里Eclipse的LogCat中后:

  09-05 13:56:49.926:E / AndroidRuntime(13243):java.lang.NoClassDefFoundError的:javax.jmdns.JmDNS
09-05 13:56:49.926:E / AndroidRuntime(13243):在com.heeere.android.dnssdtuto.DnssdDiscovery.setUp(DnssdDiscovery.java:44)
09-05 13:56:49.926:E / AndroidRuntime(13243):在com.heeere.android.dnssdtuto.DnssdDiscovery.access $ 0(DnssdDiscovery.java:38)
09-05 13:56:49.926:E / AndroidRuntime(13243):在com.heeere.android.dnssdtuto.DnssdDiscovery $ 1.运行(DnssdDiscovery.java:27)
09-05 13:56:49.926:E / AndroidRuntime(13243):在android.os.Handler.handleCallback(Handler.java:587)
09-05 13:56:49.926:E / AndroidRuntime(13243):在android.os.Handler.dispatchMessage(Handler.java:92)
09-05 13:56:49.926:E / AndroidRuntime(13243):在android.os.Looper.loop(Looper.java:123)
09-05 13:56:49.926:E / AndroidRuntime(13243):在android.app.ActivityThread.main(ActivityThread.java:4363)
 

Java的code:

 包com.heeere.android.dnssdtuto;

进口java.io.IOException异常;

进口javax.jmdns.JmDNS;
进口javax.jmdns.ServiceEvent;
进口javax.jmdns.ServiceInfo;
进口javax.jmdns.ServiceListener;

进口android.app.Activity;
进口android.os.Bundle;
进口android.widget.TextView;

公共类DnssdDiscovery延伸活动{

    android.net.wifi.WifiManager.MulticastLock锁;
    android.os.Handler处理器=新android.os.Handler();

    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        handler.postDelayed(新的Runnable(){
            公共无效的run(){
                建立();
            }
            },1000);

    } / **第一次创建活动时调用。 * /


    私人字符串类型=_workspace._tcp.local。
    私人JmDNS jmdns = NULL;
    私人的ServiceListener监听= NULL;
    私人ServiceInfo serviceInfo;
    私人无效设置(){
        android.net.wifi.WifiManager无线=(android.net.wifi.WifiManager)getSystemService(android.content.Context.WIFI_SERVICE);
        锁定= wifi.createMulticastLock(mylockthereturn);
        lock.setReferenceCounted(真正的);
        lock.acquire();
        尝试 {
            jmdns = JmDNS.create();
            jmdns.addServiceListener(类型,听者=新的ServiceListener(){

                公共无效serviceResolved(ServiceEvent EV){
                    向notifyUser(服务解决:+ ev.getInfo()getQualifiedName()+端口。+ ev.getInfo()的getPort());
                }

                公共无效serviceRemoved(ServiceEvent EV){
                    为notifyUser(服务除去:+ ev.getName());
                }

                公共无效serviceAdded(ServiceEvent事件){
                    //需要强制serviceResolved被再次调用(之后的第一个搜索)
                    jmdns.requestServiceInfo(event.getType(),event.getName(),1);
                }
            });
            serviceInfo = ServiceInfo.create(_ test._tcp.local,AndroidTest0,从普通的Andr​​oid测试服);
            jmdns.registerService(serviceInfo);
        }赶上(IOException异常E){
            e.printStackTrace();
            返回;
        }
    }


    私人无效向notifyUser(最后弦乐味精){
        handler.postDelayed(新的Runnable(){
            公共无效的run(){

        TextView的T =(TextView中)findViewById(R.id.text);
        t.se​​tText(MSG +\ñ===+ t.getText());
            }
            },1);

    }

    @覆盖
        保护无效的OnStart(){
        super.onStart();
        //新的Thread(){公共无效的run(){设置();}}。启动();
    }

    @覆盖
        保护无效的onStop(){
        如果(jmdns!= NULL){
            如果(听众!= NULL){
                jmdns.removeServiceListener(类型,侦听);
                监听= NULL;
            }
            jmdns.unregisterAllServices();
            尝试 {
                jmdns.close();
            }赶上(IOException异常E){
                // TODO自动生成的catch块
                e.printStackTrace();
            }
            jmdns = NULL;
        }
        //repo.stop();
        //s.stop();
        lock.release();
        super.onStop();
    }
}
 

AndroidManifest.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
      包=com.heeere.android.dnssdtuto
      安卓版code =1
      机器人:VERSIONNAME =1.0>
    <应用机器人:图标=@可绘制/图标机器人:标签=@字符串/ APP_NAME>
        <活动机器人:名称=。DnssdDiscovery
                  机器人:标签=@字符串/ APP_NAME>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;

    < /用途>
    <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
    <使用-权限的Andr​​oid:名称=android.permission.CHANGE_WIFI_MULTICAST_STATE/>

< /舱单>
 

解决方案

Jmdns例子的作者网站,发表Jmdns的是工程没有问题的一个新的例子。我从 Maven的中央仓库以及它的工作原理

链接是Jmdns的新的例子

I m looking for an apple bonjour for android. Are there a recommanded jar for this?

I googled for an apple bonjour application and I found the Jmdns application http://home.heeere.com/tech-androidjmdns.html.

but when running the DEMO application, a bug appear in the launch of the application. here after the Eclipse LogCat:

09-05 13:56:49.926: E/AndroidRuntime(13243): java.lang.NoClassDefFoundError: javax.jmdns.JmDNS
09-05 13:56:49.926: E/AndroidRuntime(13243):    at com.heeere.android.dnssdtuto.DnssdDiscovery.setUp(DnssdDiscovery.java:44)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at com.heeere.android.dnssdtuto.DnssdDiscovery.access$0(DnssdDiscovery.java:38)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at com.heeere.android.dnssdtuto.DnssdDiscovery$1.run(DnssdDiscovery.java:27)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at android.os.Handler.handleCallback(Handler.java:587)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at android.os.Handler.dispatchMessage(Handler.java:92)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at android.os.Looper.loop(Looper.java:123)
09-05 13:56:49.926: E/AndroidRuntime(13243):    at android.app.ActivityThread.main(ActivityThread.java:4363)

Java code:

package com.heeere.android.dnssdtuto;

import java.io.IOException;

import javax.jmdns.JmDNS;
import javax.jmdns.ServiceEvent;
import javax.jmdns.ServiceInfo;
import javax.jmdns.ServiceListener;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class DnssdDiscovery extends Activity {

    android.net.wifi.WifiManager.MulticastLock lock;
    android.os.Handler handler = new android.os.Handler();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        handler.postDelayed(new Runnable() {
            public void run() {
                setUp();
            }
            }, 1000);

    }    /** Called when the activity is first created. */


    private String type = "_workspace._tcp.local.";
    private JmDNS jmdns = null;
    private ServiceListener listener = null;
    private ServiceInfo serviceInfo;
    private void setUp() {
        android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) getSystemService(android.content.Context.WIFI_SERVICE);
        lock = wifi.createMulticastLock("mylockthereturn");
        lock.setReferenceCounted(true);
        lock.acquire();
        try {
            jmdns = JmDNS.create();
            jmdns.addServiceListener(type, listener = new ServiceListener() {

                public void serviceResolved(ServiceEvent ev) {
                    notifyUser("Service resolved: " + ev.getInfo().getQualifiedName() + " port:" + ev.getInfo().getPort());
                }

                public void serviceRemoved(ServiceEvent ev) {
                    notifyUser("Service removed: " + ev.getName());
                }

                public void serviceAdded(ServiceEvent event) {
                    // Required to force serviceResolved to be called again (after the first search)
                    jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
                }
            });
            serviceInfo = ServiceInfo.create("_test._tcp.local.", "AndroidTest", 0, "plain test service from android");
            jmdns.registerService(serviceInfo);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
    }


    private void notifyUser(final String msg) {
        handler.postDelayed(new Runnable() {
            public void run() {

        TextView t = (TextView)findViewById(R.id.text);
        t.setText(msg+"\n=== "+t.getText());
            }
            }, 1);

    }

    @Override
        protected void onStart() {
        super.onStart();
        //new Thread(){public void run() {setUp();}}.start();
    }

    @Override
        protected void onStop() {
        if (jmdns != null) {
            if (listener != null) {
                jmdns.removeServiceListener(type, listener);
                listener = null;
            }
            jmdns.unregisterAllServices();
            try {
                jmdns.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            jmdns = null;
        }
        //repo.stop();
        //s.stop();
        lock.release();
        super.onStop();
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.heeere.android.dnssdtuto"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DnssdDiscovery"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>

</manifest> 

解决方案

The author of the Jmdns example site, published a new example of Jmdns that works without problem. I have tested with the Jmdns 3.4.1 from Maven Central Repository and It works

this link is the new example of Jmdns

这篇关于苹果的Bonjour为Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆