package com.nsd.lwx.nsddemo.activity;
import android.content.Context;
import android.net.nsd.NsdManager;
import android.net.nsd.NsdServiceInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.nsd.lwx.nsddemo.R;
import com.nsd.lwx.nsddemo.utils.Constant;
import java.util.ArrayList;
/**
* nsd客户端页面
*/
public class NSDClientActivity extends AppCompatActivity {
/*NSD服务*/
private NsdManager mNsdManager = null;
private NsdManager.DiscoveryListener mNSDDiscoveryListener = null; // 搜寻监听器
private NsdManager.ResolveListener mNSDResolveListener = null;// 解析监听器
private final String mServerType = Constant.SERVER_TYPE;
private ArrayList<NsdServiceInfo> mNsdServiceInfoList0 = new ArrayList<>();//用来存储刚开始发现的网络对象列表,只有主机名字的数据
private ArrayList<NsdServiceInfo> mNsdServiceInfoList = new ArrayList<>();//用来存储解析后的网络对象列表,包含完整数据
private ArrayList<String> mServiceHostAddressList = new ArrayList<>();//用来区分是否重复的Host主机
private ArrayList<String> mServiceHostAddressAndNameList = new ArrayList<>();//用来显示给用户的列表信息
private TextView tv_connect_server;
private ListView lv_server;
private final String TAG = "NSDClientActivity";
private int mIndex = 0;
private final int MSG_RESOLVER = 10;
private boolean mStateServiceDiscoverying = false;//扫描主机状态
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nsd_client);
initView();
initData();
initEvent();
}
private void initView() {
tv_connect_server = findViewById(R.id.tv_connect_server);
lv_server = findViewById(R.id.lv_server);
}
private void initData() {
mNsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
initNSDDiscoveryListener();
initNSDResolveListener();
}
private void initEvent() {
lv_server.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
});
}
//注册NSD服务网络的监听,发现NSD网络后会在对应的方法回调
private void initNSDDiscoveryListener() {
mNSDDiscoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
Log.i(TAG, "onStartDiscoveryFailed--> " + serviceType + ":" + errorCode);
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
Log.i(TAG, "onStopDiscoveryFailed--> " + serviceType + ":" + errorCode);
}
@Override
public void onDiscoveryStarted(String serviceType) {
Log.i(TAG, "onDiscoveryStarted--> " + serviceType);
}
@Override
public void onDiscoveryStopped(String serviceType) {
Log.i(TAG, "onDiscoveryStopped--> " + serviceType);
}
@Override
public void onServiceFound(NsdServiceInfo serviceInfo) {
mNsdServiceInfoList0.add(serviceInfo);
Log.i(TAG, "Service Info: --> " + serviceInfo);
//3秒后开始解析数据
if (mNsdServiceInfoList0.size() > 0) {
mIndex = 0;
mHandler.removeMessages(MSG_RESOLVER);
mHandler.sendEmptyMessageDelayed(MSG_RESOLVER, 3 * 1000);
}
}
@Override
public void onServiceLost(NsdServiceInfo serviceInfo) {
}
};
}
//注册解析NSD网络的监听 ,解析NSD数据后回调
private void initNSDResolveListener() {
mNSDResolveListener = new NsdManager.ResolveListener() {
@Override
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
}
@Override
public void onServiceResolved(NsdServiceInfo serviceInfo) {
Log.i(TAG, "resolution : " + serviceInfo.getServiceName() + " \n host_from_server: " + serviceInfo.getHost() +
"\n port from server: " + serviceInfo.getPort());
String hostAddress = serviceInfo.getHost().getHostAddress();
if (!mServiceHostAddressList.contains(hostAddress)) {
mServiceHostAddressList.add(hostAddress);
mServiceHostAddressAndNameList.add(hostAddress + ":" + serviceInfo.getPort() + " -- " + serviceInfo.getServiceName());
mNsdServiceInfoList.add(serviceInfo);
}
Log.i(TAG, "Service List--> " + mServiceHostAddressAndNameList);
//继续解析数据
mHandler.sendEmptyMessageDelayed(MSG_RESOLVER, 10);
}
};
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_RESOLVER:
if (mStateServiceDiscoverying) {
mNsdManager.stopServiceDiscovery(mNSDDiscoveryListener); // 关闭网络发现
mStateServiceDiscoverying = false;
}
//开始根据ServiceName解析对应的
if (mIndex < mNsdServiceInfoList0.size()) {
mNsdManager.resolveService(mNsdServiceInfoList0.get(mIndex), mNSDResolveListener);
} else {
//解析完成,显示出来啊
ArrayAdapter<String> adapter = new ArrayAdapter<String>(NSDClientActivity.this, android.R.layout.activity_list_item, android.R.id.text1, mServiceHostAddressAndNameList);
lv_server.setAdapter(adapter);
}
mIndex++;
break;
}
}
};
//发现周边的NSD相关网络
public void discoveryNSDServer(View view) {
if (mStateServiceDiscoverying) {
Toast.makeText(this, "正在扫描网络...", Toast.LENGTH_SHORT).show();
} else {
mNsdServiceInfoList0.clear();
mNsdServiceInfoList.clear();
mServiceHostAddressList.clear();
mServiceHostAddressAndNameList.clear();
mStateServiceDiscoverying = true;
mNsdManager.discoverServices(mServerType, NsdManager.PROTOCOL_DNS_SD, mNSDDiscoveryListener);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android NSD项目代码
共75个文件
xml:43个
png:10个
java:8个
5星 · 超过95%的资源 需积分: 50 66 下载量 193 浏览量
2018-03-15
23:16:35
上传
评论
收藏 159KB RAR 举报
温馨提示
NSD示例代码 这个程序设计了服务端和客户端 虽然其他的很多判断没有完善,但是基本功能是可以使用了的
资源推荐
资源详情
资源评论
收起资源包目录
p20180313.rar (75个子文件)
p20180313
NSDDemo
gradlew 5KB
settings.gradle 16B
NSDDemo.iml 861B
.idea
libraries
com_android_support_support_fragment_26_1_0.xml 702B
org_hamcrest_hamcrest_integration_1_3_jar.xml 578B
android_arch_lifecycle_runtime_1_0_0.xml 658B
com_android_support_test_espresso_espresso_core_3_0_1.xml 710B
com_google_code_findbugs_jsr305_2_0_1_jar.xml 359B
com_android_support_support_compat_26_1_0.xml 692B
com_squareup_javawriter_2_1_1_jar.xml 538B
android_arch_core_common_1_0_0_jar.xml 533B
com_android_support_animated_vector_drawable_26_1_0.xml 742B
com_android_support_support_vector_drawable_26_1_0.xml 737B
javax_inject_javax_inject_1_jar.xml 528B
org_hamcrest_hamcrest_core_1_3_jar.xml 543B
android_arch_lifecycle_common_1_0_0_jar.xml 548B
com_android_support_constraint_constraint_layout_solver_1_0_2_jar.xml 384B
com_android_support_support_media_compat_26_1_0.xml 722B
com_android_support_support_annotations_26_1_0_jar.xml 608B
org_hamcrest_hamcrest_library_1_3_jar.xml 557B
com_android_support_test_espresso_espresso_idling_resource_3_0_1.xml 765B
com_android_support_support_core_utils_26_1_0.xml 712B
com_android_support_appcompat_v7_26_1_0.xml 682B
net_sf_kxml_kxml2_2_3_0_jar.xml 285B
com_android_support_test_rules_1_0_1.xml 652B
com_android_support_constraint_constraint_layout_1_0_2.xml 501B
com_android_support_support_core_ui_26_1_0.xml 697B
com_android_support_test_runner_1_0_1.xml 657B
junit_junit_4_12_jar.xml 487B
com_android_support_support_v4_26_1_0.xml 672B
runConfigurations.xml 564B
misc.xml 2KB
workspace.xml 169KB
gradle.xml 626B
modules.xml 351B
gradle
wrapper
gradle-wrapper.properties 236B
gradle-wrapper.jar 52KB
local.properties 428B
gradlew.bat 2KB
gradle.properties 1002B
.gitignore 127B
app
src
androidTest
java
com
nsd
lwx
nsddemo
ExampleInstrumentedTest.java 765B
test
java
com
nsd
lwx
nsddemo
ExampleUnitTest.java 413B
main
AndroidManifest.xml 944B
res
mipmap-hdpi
ic_launcher.png 3KB
ic_launcher_round.png 5KB
mipmap-xxxhdpi
ic_launcher.png 9KB
ic_launcher_round.png 15KB
mipmap-xhdpi
ic_launcher.png 4KB
ic_launcher_round.png 7KB
mipmap-anydpi-v26
ic_launcher.xml 276B
ic_launcher_round.xml 276B
mipmap-mdpi
ic_launcher.png 2KB
ic_launcher_round.png 3KB
drawable
ic_launcher_background.xml 6KB
layout
activity_nsd_server.xml 2KB
activity_nsd_client.xml 976B
activity_main.xml 889B
drawable-v24
ic_launcher_foreground.xml 2KB
values
colors.xml 214B
strings.xml 73B
styles.xml 394B
mipmap-xxhdpi
ic_launcher.png 6KB
ic_launcher_round.png 10KB
java
com
nsd
lwx
nsddemo
utils
Constant.java 223B
activity
NSDClientActivity.java 7KB
MainActivity.java 829B
NSDServerActivity.java 4KB
nsd
NSDClient.java 3KB
NSDServer.java 4KB
app.iml 11KB
.gitignore 8B
build.gradle 952B
proguard-rules.pro 772B
build.gradle 573B
共 75 条
- 1
资源评论
- yy10694421422021-04-28直接就可以用,编译通过,测试已完毕,用在项目上了,非常感谢!
- 哦哦6662019-01-09试过,可以参考。
- allenso1234562018-06-20试过可以用。
峥嵘life
- 粉丝: 2532
- 资源: 114
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功