2012-09-05 3 views
3

나는 사과를 찾고있다. bonjour for android. 이에 대한 권장 항아리가 있습니까?사과 bonjour for android

나는 사과 bonjour 응용 프로그램에 대한 인터넷 검색을하고 난 Jmdns 응용 프로그램을 찾았 http://home.heeere.com/tech-androidjmdns.html.

DEMO 응용 프로그램을 실행하면 응용 프로그램이 시작될 때 버그가 나타납니다. 여기 이클립스 로그 캣 후 :

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) 

자바 코드 :

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> 
+0

PLS는 Y를 게시 우리 코드는 우리가 당신을 도울 수 있도록합니다. – RaphMclee

답변

1

Jmdns example site의 작성자는 문제없이 작동하는 Jmdns의 새로운 예를 발표했습니다. 나는 Maven Central Repository에서 Jmdns 3.4.1 테스트 및 그것은

link 새로운 Jmdns

의 예를 들어 내가 받는다는 jmdns 3.4.1.jar 로 jmdns.jar 교체 후 같은 문제 했다
1

"libs"라는 폴더를 만들고 해당 폴더에 jar 파일을 넣은 다음 시도하십시오.

+0

이클립스가 jar 파일을 볼 수 있습니다. 건축물에는 문제가 없습니다. 문제는 응용 프로그램을 시작할 때 예외 오류입니다. – MOHAMED

+0

문제가 NoDefClassFoundError라는 것을 알 수 있습니다. 다른 비슷한 .jar와 비슷한 뭔가가 나에게 일어났다. 이 예외는 클래스에 접근 할 수 없을 때 발생합니다. 그래서 생각할지라도 Eclipse는 그 클래스를 찾지 않습니다. 내 질문보기 : http://stackoverflow.com/questions/10070788/noclassdeffonderror-in-android-but-the-class-is-in-one-jar-included-in-the-cl. "libs"폴더가 나를 위해 그것을 고정하게. 필자의 경우 Eclipse는 컴파일시 오류를 표시하지 않았지만 실행에 실패했습니다. – Fustigador

3

입니다 작동했다 당신이 libs와 폴더에이 파일을 보관 빌드 경로와 다른 폴더 에서 jar 파일을 제거하는 시도를 시작에 달빅 오류가 발생합니다 경우 Click to download

이 당신에게 도움이 의지 할 수