android中的NSD网络服务发现出错

时间:2014-07-12 19:18:08

标签: java android

我不知道我的应用程序出了什么问题我跟着这么多教程,任何提示/帮助/建议都会受到赞赏,我是android的新手。我在listner的onserviceregistrationfailed函数中遇到错误。

package com.example.ravinetworkapplication;

import java.io.IOException;
import java.net.ServerSocket;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.content.pm.ServiceInfo;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdManager.DiscoveryListener;
import android.net.nsd.NsdServiceInfo;
import android.net.nsd.NsdManager.RegistrationListener;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

NsdManager mNsdManager;
Context context;
NsdManager.DiscoveryListener mDiscoveryListner=null;
NsdManager.RegistrationListener mRegistrationListener=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    mNsdManager= (NsdManager) this.getSystemService(Context.NSD_SERVICE);
    final ServerSocket mServerSocket;
    final ArrayList<String> listName = new ArrayList<String>();

    Integer localPort = 0;


    final ListView list = (ListView) findViewById(R.id.listView1);
    listName.add("arunima");
    listName.add("abhishek");

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this ,     android.R.layout.simple_list_item_1,listName);
    list.setAdapter(adapter);

    try {
         mServerSocket = new ServerSocket(0);
        localPort = mServerSocket.getLocalPort();
        mServerSocket.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



    mRegistrationListener = new  NsdManager.RegistrationListener() {

        @Override
        public void onUnregistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onServiceRegistered(NsdServiceInfo serviceInfo) {
            // TODO Auto-generated method stub
            Log.v("service registrd", "i am on folks");
            Toast.makeText(getApplicationContext(), "Registerd", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onRegistrationFailed(NsdServiceInfo serviceInfo, int errorCode) {
            // TODO Auto-generated method stub

            Log.v("service registration fail", "can not register service kumar ravi");

        }
    };



    mDiscoveryListner = new NsdManager.DiscoveryListener() {

        @Override
        public void onStopDiscoveryFailed(String serviceType, int errorCode) {
            // TODO Auto-generated method stub
            Log.v("cannot stop service", "service discovery failed");
        }

        @Override
        public void onStartDiscoveryFailed(String serviceType, int errorCode) {
            // TODO Auto-generated method stub

            Log.v("can not start", "Can not start discovery kumar ravi "+errorCode);

        }

        @Override
        public void onServiceLost(NsdServiceInfo service) {
            // TODO Auto-generated method stub





        }

        @Override
        public void onServiceFound(NsdServiceInfo service) {
            // TODO Auto-generated method stub
            Log.v("service found", "we found the service");

            if(!service.getServiceType().equals("_myapp.tcp.")){

            }
            else if(service.getServiceName().equals("kumar")){

            }
            else {

                listName.add(service.getServiceName());

                adapter.notifyDataSetChanged();
                list.setAdapter(adapter);
                Toast.makeText(getApplicationContext(), "Finally found the service "+service.getServiceName(), Toast.LENGTH_LONG).show();


            }


        }

        @Override
        public void onDiscoveryStopped(String serviceType) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onDiscoveryStarted(String serviceType) {
            // TODO Auto-generated method stub

            Log.v("Service Discovery Started", "Searching of Service Discovery");

        }
    };


    Log.v("registerd port", localPort.toString());
    final NsdServiceInfo serviceInfo = new NsdServiceInfo();
    serviceInfo.setPort(localPort);
    serviceInfo.setServiceName("kumar");
    serviceInfo.setServiceType("_myapp.tcp.");

    //mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);


    Button startBroadcast = (Button) findViewById(R.id.button1);
    Button startListen = (Button) findViewById(R.id.button2);

    startBroadcast.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            mNsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, mRegistrationListener);
        }
    });

    startListen.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            mNsdManager.discoverServices("_myapp.tcp.", NsdManager.PROTOCOL_DNS_SD, mDiscoveryListner);

        }
    });



}



@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    try{
    mNsdManager.unregisterService(mRegistrationListener);
    mNsdManager.stopServiceDiscovery(mDiscoveryListner);
    Log.v("Stopped", "Scanning stopped"); }
    catch(Exception e){
        Log.v("some error in unregistring service", e.toString());
    }
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container,
                false);
        return rootView;
    }
}

}

0 个答案:

没有答案