2012-09-05 74 views
3

我在尋找適合android的蘋果卓悅。 這是否有推薦的jar?蘋果卓悅for android

我搜索了一個蘋果bonjour應用程序,我找到了Jmdns應用程序http://home.heeere.com/tech-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): 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代碼:

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

請張貼ÿ我們的代碼,所以我們可以幫助你。 – RaphMclee

回答

1

製作一個名爲「libs」的文件夾,將該jar放入該文件夾中,然後嘗試。

+0

我可以看到eclipse看到了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

我有同樣的問題 後來我換成jmdns.jar與Maven jmdns 3.4.1.jar Click to download

,如果你將獲得在啓動時試圖刪除從構建路徑和其他文件夾 jar文件保存在libs文件夾中文件的Dalvik錯誤, 可能是這將有助於你