问题: 简短描述: 我正在尝试注册对我的 PC 可见的服务和端口,以便以后连接到 PC 应用程序。这段代码没有注册服务,我不知道为什么,我只知道当它通过安卓监视器在我的手机上运行时,我使用记录器告诉我注册失败。
更长的描述: 我一直在尝试构建一个简单的应用程序,它将为我的 PC 提供来自我的 Android 手机的信息。我不熟悉网络编程,但从我的研究中我了解到,如果我使用 android 的 NsdManager,我将能够为我正在开发的 PC 应用程序创建一个在我的网络上运行的服务,以使用“套接字编程”连接到。我一直在尝试使用 NsdManager 来注册此服务(如果他们是在我的手机上启动在我的网络上运行的服务以通过 PC 连接到的更好的方法,那么将不胜感激。
请求帮助: 很高兴知道: 1. 开始开发与我稍后将开发的 PC 应用程序“配对”的 Android 应用程序的最佳方式是什么?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.
}
};
}
非常感谢您的时间和帮助!