第一次尝试在

Android中进行IP发现.我使用了

http://developer.android.com/training/connect-devices-wirelessly/nsd.html#discover并编写了代码.我没有注册设备,只是在网络中发现服务.当我在模拟器或设备中运行项目时,会调用onDiscoveryStarted(),但永远不会调用onServiceFound().请在下面找到我的代码.任何输入都非常感谢.谢谢!

public class MainActivity extends AppCompatActivity {

private Button discoverButton;

Context mContext;

NsdManager mNsdManager;

NsdManager.ResolveListener mResolveListener;

NsdManager.DiscoveryListener mDiscoveryListener;

NsdManager.RegistrationListener mRegistrationListener;

public static final String SERVICE_TYPE = "_http._tcp.";

public static final String TAG = "MyApp_MAIN_CLIENT";

public String mServiceName = "MyApp";

/*

* public static final String SERVICE_TYPE = "_http._tcp.";

public static final String TAG = "NsdHelper";

public String mServiceName = "NsdChat";

* */

NsdServiceInfo mService;

private Handler mUpdateHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mNsdManager = (NsdManager) this.getSystemService(Context.NSD_SERVICE);

discoverButton = (Button) findViewById(R.id.netButton);

discoverButton.setOnClickListener(new View.OnClickListener() {

public void onClick(android.view.View v) {

initializeDiscoveryListener();

initializeResolveListener();

discoverServices();

}

});

}

public void discoverServices() {

mNsdManager.discoverServices(

SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

}

public void initializeDiscoveryListener() {

// Instantiate a new DiscoveryListener

mDiscoveryListener = new NsdManager.DiscoveryListener() {

// Called as soon as service discovery begins.

@Override

public void onDiscoveryStarted(String regType) {

Log.d(TAG, "Service discovery started");

}

@Override

public void onServiceFound(NsdServiceInfo service) {

// A service was found! Do something with it.

Log.d(TAG, "Service discovery success" + service);

if (!service.getServiceType().equals(SERVICE_TYPE)) {

// Service type is the string containing the protocol and

// transport layer for this service.

Log.d(TAG, "Unknown Service Type: " + service.getServiceType());

} /*else if (service.getServiceName().equals(mServiceName)) {

// The name of the service tells the user what they'd be

// connecting to. It could be "Bob's Chat App".

Log.d(TAG, "Same machine: " + mServiceName);

}

//else if (service.getServiceName().contains("NsdChat")){*/

else{

mNsdManager.resolveService(service, mResolveListener);

}

}

@Override

public void onServiceLost(NsdServiceInfo service) {

// When the network service is no longer available.

// Internal bookkeeping code goes here.

Log.e(TAG, "service lost" + service);

}

@Override

public void onDiscoveryStopped(String serviceType) {

Log.i(TAG, "Discovery stopped: " + serviceType);

}

@Override

public void onStartDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, "Discovery failed: Error code:" + errorCode);

mNsdManager.stopServiceDiscovery(this);

}

@Override

public void onStopDiscoveryFailed(String serviceType, int errorCode) {

Log.e(TAG, "Discovery failed: Error code:" + errorCode);

mNsdManager.stopServiceDiscovery(this);

}

};

}// end of initializeListener()

public void initializeResolveListener() {

mResolveListener = new NsdManager.ResolveListener() {

@Override

public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {

Log.e(TAG, "Resolve failed" + errorCode);

}

@Override

public void onServiceResolved(NsdServiceInfo serviceInfo) {

Log.e(TAG, "Resolve Succeeded. " + serviceInfo);

if (serviceInfo.getServiceName().equals(mServiceName)) {

Log.d(TAG, "Same IP.");

return;

}

mService = serviceInfo;

int port = mService.getPort();

InetAddress host = mService.getHost();

Log.d(TAG,host.toString());

}

};

}//end of initializeResolveListener

@Override

protected void onPause() {

super.onPause();

stopDiscovery();

tearDown();

}

@Override

protected void onResume() {

super.onResume();

discoverServices();

}

@Override

protected void onDestroy() {

tearDown();

super.onDestroy();

}

public void stopDiscovery() {

mNsdManager.stopServiceDiscovery(mDiscoveryListener);

}

public void tearDown() {

mNsdManager.unregisterService(mRegistrationListener);

}

}

android nsdservice 类型,Android NSD onServiceFound()没有被调用相关推荐

  1. android安装类型,Android 获得已安装的程序并且区分类型

    核心代码: 找到系统已经安装的应用 List packs = getPackageManager().getInstalledPackages(0);//0 代表所有的包 监听程序的安装和卸载 pac ...

  2. android 响应类型,android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改响应类型...

    正如Than所说,使用拦截器的解决方案并不是那么好.我已经设法用一个Rx变压器来解决这个问题.我还添加了自定义api异常,当出现问题时我可以抛出它并在onError中轻松处理它.我认为它更强大. 响应 ...

  3. android bean类型,Android Gson解析数组中多种类型

    最近空闲时间在一款仿某条的app,一开始,采用的是api store中的数据源,但是这样,好多功能因为不能得到接口支持不能实现,因此只能......通过fiddler抓 某条 的接口了.. 在抓一个接 ...

  4. Android MIME类型结构

    Android MIME类型的结构 MIMW类型标准:http://tools.ietf/html/rfc2046 根据MIME类型规范,MIME类型包含两部分:类型和子类型.下面是一些流行的MIME ...

  5. 【Android 逆向】Android 逆向通用工具开发 ( Windows 平台运行的控制台应用程序类型 | 编译 Windows 平台运行的 Android 逆向程序 )

    文章目录 一.Windows 平台运行的控制台应用程序类型 二.编译 Windows 平台运行的 Android 逆向程序 一.Windows 平台运行的控制台应用程序类型 hacktool 工程的类 ...

  6. 【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )

    文章目录 一.Android 平台运行的 cmd 程序类型 二.Android 平台运行的 cmd 程序编译选项 三.编译 Android 平台的 cmd 可执行程序 一.Android 平台运行的 ...

  7. android 字符串转浮点,Android String类型转换为float、double和int的工具类方法

    在做项目时遇到了需要把年份(String)转换为int类型,对年份进行比较,顺便提取为方法,保存下来方便以后使用. public class ConvertUtil { //把String转化为flo ...

  8. Android动画类型

    动画类型 Android的animation由四种类型组成 <ignore_js_op>  Android动画模式 Animation主要有两种动画模式: 一种是tweened anima ...

  9. android 字符转double,Android String类型转换为float、double和int的工具类方法

    在做项目时遇到了需要把年份(String)转换为int类型,对年份进行比较,顺便提取为方法,保存下来方便以后使用. public class ConvertUtil { //把String转化为flo ...

最新文章

  1. Visual Studio进行Web性能测试- Part III
  2. 【MAC】记mac中django-admin.py 调用失败的解决方案
  3. 【填坑】初识钛极小龟NB-IoT物联网开发套件TiKit
  4. xdeepfm算法思维导图与代码
  5. PHP-客户端的IP地址伪造、CDN、反向代理、获取的那些事儿
  6. 大批工厂提前20天放假,而大家却都在玩金融
  7. Delphi中禁止WebBrowser右键的方法
  8. 从底层分析c和类c语言
  9. Microsoft 帐户异常登录活动,QQ邮箱代收hotmail邮件不成功
  10. mysql 5.6 64位解压版_MySQL 5.6 for Windows 解压缩版配置安装(win 10 64位亲测)附安装包下载链接...
  11. 计算机组成原理完整学习笔记(七):CPU 的结构与功能
  12. 计算机如何打开安全组策略,Win10系统无法打开本地安全策略如何解决
  13. Python实现二维码扫码登录
  14. 百度主页被“/?tn=88093251_85_hao_pg“劫持的一种解决办法
  15. cropperjs裁剪后图片变大的问题
  16. 明天太阳照常升起的概率是多少?
  17. 阿里,京东,蚂蚁面试题
  18. vue中循环图片不显示问题
  19. ...可变形参的使用
  20. 【转】4G手机打电话为什么会断网 4G上网和通话不能并存原因分析

热门文章

  1. 程序员的基本功:为什么非要学Python数据分析?答案早就写在JD上了...
  2. 你不知道的 Web 性能优化 | 原力计划
  3. 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
  4. 如何在 JavaScript 面试中过五关斩六将?
  5. Python 一键转 Java?“Google 翻译”你别闹
  6. 老代码多=过度耦合=if else?阿里巴巴工程师这样捋直老代码 | 技术头条
  7. 前端开发者如何利用 CSS 实现酷炫的变色方案?
  8. 集 Python、C、R、Ruby 之所长,动态编程语言 Julia 1.0 正式发布
  9. 阿里 8.6 亿美元再押 ofo,与摩拜合并再无可能?
  10. 当科学家遇上流氓,被喧哗炒作的量子通信技术又将何时落地?