Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NsdManager注册失败_Android_Networking_Service_Nsd - Fatal编程技术网

Android NsdManager注册失败

Android NsdManager注册失败,android,networking,service,nsd,Android,Networking,Service,Nsd,问题: 简短描述: 我正在尝试注册一个对我的电脑可见的服务和端口,以便以后连接到电脑应用程序。这段代码没有注册该服务,我也不知道为什么,我只知道当它通过android监视器在我的手机上运行时,我使用了一个记录器告诉我注册失败 详细描述: 我一直在尝试构建一个简单的应用程序,为我的电脑提供来自Android手机的信息。我不熟悉网络编程,但从我的研究中我了解到,如果我使用android的NsdManager,我将能够为我正在开发的PC应用程序创建一个在网络上运行的服务,以便使用“套接字编程”连接。我

问题: 简短描述: 我正在尝试注册一个对我的电脑可见的服务和端口,以便以后连接到电脑应用程序。这段代码没有注册该服务,我也不知道为什么,我只知道当它通过android监视器在我的手机上运行时,我使用了一个记录器告诉我注册失败

详细描述: 我一直在尝试构建一个简单的应用程序,为我的电脑提供来自Android手机的信息。我不熟悉网络编程,但从我的研究中我了解到,如果我使用android的NsdManager,我将能够为我正在开发的PC应用程序创建一个在网络上运行的服务,以便使用“套接字编程”连接。我一直在尝试使用NsdManager注册这项服务(如果他们有更好的方式在我的网络上启动一项服务,通过PC连接到我的手机,我将不胜感激)

请求的帮助: 很高兴知道: 1.开始开发Android应用程序的最佳方式是什么,它将与我稍后开发的PC应用程序“配对”? 2.NsdManager注册服务的方法对此有效吗? 3.是否有方法捕获此服务无法运行的原因的错误代码 登记 4.对于开始android网络开发,有什么有用的资源、库、技巧或窍门吗?我不熟悉本节 开发和寻找这类东西

代码:

import android.app.Activity;
    import android.content.Context;
    import android.net.nsd.NsdManager;
    import android.net.nsd.NsdServiceInfo;
    //import android.support.v7.appcompat.R;
    import android.os.Bundle;
    import android.util.Log;

public class ServerActivity extends Activity {     //Possibly should be extends "AppCompatActivity"
private String SERVICE_NAME = "meService";
private String SERVICE_TYPE = "_http._tcp.";
private String TAG = "ServerActivity";
private NsdManager mNsdManager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_server);

    mMethod();

}

private void mMethod() {
    mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
    registerService(9000);
}

@Override
protected void onPause() {
    if (mNsdManager != null) {
        mNsdManager.unregisterService(mRegistrationListener);
    }
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    if (mNsdManager != null) {
        registerService(9000);
    }

}

@Override
protected void onDestroy() {
    if (mNsdManager != null) {
        mNsdManager.unregisterService(mRegistrationListener);
    }
    super.onDestroy();
}

public void registerService(int port) {
    NsdServiceInfo serviceInfo = new NsdServiceInfo();
    serviceInfo.setServiceName(SERVICE_NAME);
    serviceInfo.setServiceType(SERVICE_TYPE);
    serviceInfo.setPort(port);

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

NsdManager.RegistrationListener mRegistrationListener = new NsdManager.RegistrationListener() {

    @Override
    public void onServiceRegistered(NsdServiceInfo NsdServiceInfo) {
        String mServiceName = NsdServiceInfo.getServiceName();
        SERVICE_NAME = mServiceName;
        Log.d(TAG, "Registered name : " + mServiceName);
    }

    @Override
    public void onRegistrationFailed(NsdServiceInfo serviceInfo,
                                     int errorCode) {
        Log.d(TAG, "Registration failed: " + errorCode);
        // Registration failed! Put debugging code here to determine
        // why.
    }

    @Override
    public void onServiceUnregistered(NsdServiceInfo serviceInfo) {
        // Service has been unregistered. This only happens when you
        // call
        // NsdManager.unregisterService() and pass in this listener.
        Log.d(TAG,
                "Service Unregistered : " + serviceInfo.getServiceName());
    }

    @Override
    public void onUnregistrationFailed(NsdServiceInfo serviceInfo,
                                       int errorCode) {
        // Unregistration failed. Put debugging code here to determine
        // why.
    }


   };

}

非常感谢您的时间和帮助!

我不记得
NSD
在注册两次服务时是如何操作的,因为这就是您要做的。首先在
onCreate
中调用
registerService(9000)
,然后在
onResume()中调用
。这可能就是原因。不管怎样,logcat怎么说?我删除了注册服务的第二个调用,它仍然告诉我它通过Log.d函数失败。它在onRegistrationFailed方法中的NsdServiceInfo对象logcat中给我“注册失败”,错误代码为“0”。您删除了哪一个,
onCreate()
的或
onResume()
的一个?因为如果您离开
onResume()中的一个
它可能会被多次调用,涉及
服务器活动
生命周期。另外,请确保您正在对应用程序使用INTERNET权限。我删除了onResume方法中的权限,应用程序确实声明了INTERNET权限。嗯……一切似乎都很好。请尝试其他端口,然后……文档中出现了键入错误,与您一样r代码,即
onServiceRegistered(NsdServiceInfo-NsdServiceInfo)
的签名。事实上,它不应该编译…无论如何,使用
onServiceRegistered(NsdServiceInfo-serviceInfo)
。然后浏览源代码,了解错误代码0的含义。