当前位置: 首页 > news >正文

东莞网页制作免费网站制作摄影师招聘网站

东莞网页制作免费网站制作,摄影师招聘网站,郑州模板网站,宁波网站推广平台效果好Wi-Fi直连分享#xff1a;Android设备间的高速连接 引言 随着无线局域网#xff08;Wi-Fi#xff09;的普及和发展#xff0c;使用Wi-Fi直连技术#xff08;P2P#xff09;在没有中间接入点的情况下实现设备间直接互联成为可能。通过Wi-Fi直连#xff0c;具备相应硬件… Wi-Fi直连分享Android设备间的高速连接 引言 随着无线局域网Wi-Fi的普及和发展使用Wi-Fi直连技术P2P在没有中间接入点的情况下实现设备间直接互联成为可能。通过Wi-Fi直连具备相应硬件的Android 4.0及更高版本设备可以实现高速连接通信比传统蓝牙连接具有更远的传输距离。这项技术对于多人游戏、照片共享等需要设备间数据共享的应用非常有用。 Wi-Fi直连的核心API是WifiP2pManager类。 普通连接代码实现 初始化 private WifiP2pManager.Channel mChannel; // app与framework联系的纽带 private WifiP2pManager mManager; ... mManager (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); mChannel mManager.initialize(this, getMainLooper(), null);创建群组 只有服务端设备需要执行此步骤客户端设备可以跳过。即使不创建群组设备仍然可以进行后续的设备发现和连接操作。一旦连接成功这两台设备将自动形成一个群组并在其中选择一台设备作为群主。创建群组后会在Wi-Fi列表中出现一个名为DIRECT_**_DeviceName的网络这个网络是为没有Wi-Fi直连功能的设备准备的它们可以通过连接此网络来加入群组。但是使用此方式加入的设备不会收到WIFI_P2P_CONNECTION_CHANGED_ACTION广播不过在调用mManager.requestGroupInfo时可以获取到这些设备的信息。 mManager.createGroup(mChannel, new WifiP2pManager.ActionListener() {Overridepublic void onSuccess() {appendLog(创建群组成功);// 在这里可以创建ServerSocket并等待客户端接入...}Overridepublic void onFailure(int reason) {appendLog(创建群组失败);...} });很多地方都会使用到WifiP2pManager.ActionListener回调下面列出了一些可能的错误原因 /*** Wi-Fi直连操作失败*/ public static final int ERROR 0;/*** 设备不支持Wi-Fi直连功能*/ public static final int P2P_UNSUPPORTED 1;/*** 操作失败框架忙于处理其他请求*/ public static final int BUSY 2;/*** 操作失败未添加任何服务请求*/ public static final int NO_SERVICE_REQUESTS 3;发现设备 mManager.discoverPeers(mChannel, mActionListener);客户端设备直接执行此操作不需要创建群组。两台设备必须同时执行设备发现操作才能相互发现对方的存在。 停止发现设备 mManager.stopPeerDiscovery(mChannel, mActionListener);连接设备 连接设备的操作可以由服务端或客户端发起。device是通过设备发现获得的对方设备信息后续会介绍广播的相关内容。 WifiP2pConfig config new WifiP2pConfig(); config.deviceAddress device.deviceAddress; mManager.connect(mChannel, config, mActionListener);取消连接 连接后也可以取消连接。注意取消操作将取消所有正在发起连接邀请的设备不能针对单个设备进行操作。 mManager.cancelConnect(mChannel, mActionListener);解散群组 当需要取消某个单一连接时只能从客户端取消对服务端的连接。如果需要取消所有连接只能通过解散群组来实现。 mManager.removeGroup(mChannel, mActionListener);获取群组相关信息 可以通过以下代码获取群组中的所有设备信息 mManager.requestGroupInfo(mChannel, new WifiP2pManager.GroupInfoListener() {Overridepublic void onGroupInfoAvailable(WifiP2pGroup group) {appendLog(已连接的设备);CollectionWifiP2pDevice devices group.getClientList();int i1;for(WifiP2pDevice d: devices) {appendLog((i) : ip: d.deviceAddress, name: d.deviceName , isGroupOwner: d.isGroupOwner() );}} });广播实现 使用广播来通知应用层自身设备、发现设备和连接设备的状态变化。 Intent说明WIFI_P2P_CONNECTION_CHANGED_ACTION当设备的 WLAN 连接状态更改时广播。WIFI_P2P_PEERS_CHANGED_ACTION当您调用 discoverPeers() 时广播。如果您在应用中处理此 Intent则通常需要调用 requestPeers() 以获取对等设备的更新列表。WIFI_P2P_STATE_CHANGED_ACTION当 WLAN P2P 在设备上启用或停用时广播。WIFI_P2P_THIS_DEVICE_CHANGED_ACTION当设备的详细信息例如设备名称更改时广播。WIFI_P2P_DISCOVERY_CHANGED_ACTION当设备开始或停止发现设备时广播 下面是一个实现广播接收器的示例 public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {public WiFiDirectBroadcastReceiver() {super();}Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {// 检查 Wi-Fi 是否启用并通知相应的活动int state intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, WifiP2pManager.WIFI_P2P_STATE_DISABLED);// wifi p2p 能否使用取决于你的 Wi-Fi 是否已打开。if (state WifiP2pManager.WIFI_P2P_STATE_ENABLED) {// wifi p2p 可用} else if (state WifiP2pManager.WIFI_P2P_STATE_DISABLED) {// wifi p2p 不可用}} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {// 调用 WifiP2pManager.requestPeers() 获取当前对等设备列表// 获取所有扫描到的设备。WifiP2pDeviceList mPeers intent.getParcelableExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST);} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {// 处理新连接或断开连接的情况// wifi p2p 连接状态发生变化在创建组成功时也会触发该广播。// 获取 Wi-Fi P2P 网络状态NetworkInfo networkInfo intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);// 关于该群组的连接信息。有三个属性// 1. groupFormed群组是否已形成作为群主创建群组后获得的该属性值为 true// 2. isGroupOwner本设备是否为群主// 3. groupOwnerAddress群主的 IP 地址WifiP2pInfo p2pInfo intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO);// 群组的相关信息如网络名称、密码和所有已连接设备等。WifiP2pGroup p2pGroup intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP);if (networkInfo ! null networkInfo.isConnected()) {// 表明已连接上创建组成功也会进入该判断if (p2pInfo.groupFormed p2pInfo.isGroupOwner) {// 群组已形成且本设备为群主} else if (p2pInfo.groupFormed) {// 群组已形成但本设备非群主// 获取群主 IPString groupOwnerAddress p2pInfo.groupOwnerAddress.getHostAddress();// 建立 Socket 连接}}} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {// 处理本设备的 Wi-Fi 状态变化// 本设备信息发生变化WifiP2pDevice wifiP2pDevice intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE);} else if (WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION.equals(action)) {// 处理发现设备操作状态变化// WifiP2pManager.WIFI_P2P_DISCOVERY_STOPPED停止状态// WifiP2pManager.WIFI_P2P_DISCOVERY_STARTED开始状态int discoveryState intent.getIntExtra(WifiP2pManager.EXTRA_DISCOVERY_STATE,WifiP2pManager.WIFI_P2P_DISCOVERY_STOPPED);}} }获取连接信息 上述代码片段展示了如何使用WifiP2pManager来获取连接信息。通过调用requestConnectionInfo()方法并传入一个ConnectionInfoListener我们可以在连接信息可用时得到回调。 如果连接信息为null或群主地址为空直接返回。如果群已建立且设备是群主可以通过requestGroupInfo()方法获取群组信息其中包括WiFi热点密码。 对于客户端设备可以根据需要执行相应的操作。 针对性WiFi P2P连接 除了普通的搜索和连接方式外还可以使用WifiP2pManager.discoverServices()方法进行针对性的WiFi P2P连接。这种方式会根据服务提供的字段和协议来判断是否符合连接要求。 服务创建 Bonjour 使用Bonjour服务时可以通过创建txt记录来指定相关信息。 示例代码如下 MapString, String txtRecord new HashMapString, String(); txtRecord.put(txtvers, 1); txtRecord.put(pdl, application/postscript); mServiceInfo WifiP2pDnsSdServiceInfo.newInstance(instanceName,serviceType, txtRecord);其中serviceType参数指定了应用程序使用的协议和传输层。 UPnP 使用UPnP服务时可以指定服务类型和相关信息。 示例代码如下 ListString services new ArrayListString(); services.add(urn:schemas-upnp-org:service:AVTransport:1); services.add(urn:schemas-upnp-org:service:ConnectionManager:1); mServiceInfo WifiP2pUpnpServiceInfo.newInstance(6859dede-8574-59ab-9332-123456789011,urn:schemas-upnp-org:device:MediaRenderer:1,services);添加服务 创建完服务信息后可以使用addLocalService()方法将服务添加到本地。 示例代码如下 mManager.addLocalService(mChannel, mServiceInfo, mActionListener);创建群组 与之前的示例相同可以使用相同的方法来创建WiFi P2P群组。 创建服务监听 针对Bonjour和UPnP服务可以分别创建相应的监听器。当搜索到设备服务时这些监听器会得到回调。 示例代码如下 // Bonjour服务监听器 WifiP2pManager.DnsSdServiceResponseListener ptrListener new WifiP2pManager.DnsSdServiceResponseListener() {Overridepublic void onDnsSdServiceAvailable(String instanceName, String registrationType, WifiP2pDevice srcDevice) {}}WifiP2pManager.DnsSdTxtRecordListener txtListener new WifiP2pManager.DnsSdTxtRecordListener() {Overridepublic void onDnsSdTxtRecordAvailable(String fullDomainName, MapString, String txtRecordMap, WifiP2pDevice srcDevice) {} } mManager.setDnsSdResponseListeners(mChannel, ptrListener, txtListener);// UPnP服务监听器 private WifiP2pManager.UpnpServiceResponseListener upnpListener new WifiP2pManager.UpnpServiceResponseListener() {Overridepublic void onUpnpServiceAvailable(ListString uniqueServiceNames, WifiP2pDevice srcDevice) {} } mManager.setUpnpServiceResponseListener(mChannel, upnpListener);这些监听器会在搜索到设备服务时得到回调。根据搜索时传入的服务request决定回调哪个监听器。 发现服务 通过创建相应的服务请求可以发现Bonjour和UPnP服务。 示例代码如下 // Bonjour类型的TXT服务对应上面 txtListener WifiP2pDnsSdServiceRequest txtRequest WifiP2pDnsSdServiceRequest.newInstance(INSTANCE_NAME, SERVICE_TYPE); // Bonjour类型的PTR服务对应上面 ptrListener WifiP2pDnsSdServiceRequest ptrRequest WifiP2pDnsSdServiceRequest.newInstance(SERVICE_TYPE); // UPnP服务对应上面的upnpListener WifiP2pUpnpServiceRequest upnpRequest WifiP2pUpnpServiceRequest.newInstance(searchTarget);mManager.addServiceRequest(mChannel, txtRequest, mActionListener); mManager.addServiceRequest(mChannel, ptrRequest, mActionListener); mManager.addServiceRequest(mChannel, upnpRequest, mActionListener);其余步骤与之前的示例相同。 以上是针对性WiFi P2P连接的示例代码和步骤。你可以根据自己的需求来选择合适的服务类型和设置相应的监听器来处理搜索到的设备服务。 参考 参考文档https://developer.android.google.cn/guide/topics/connectivity/wifip2p?hlzh-cn
文章转载自:
http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn
http://www.morning.mfrb.cn.gov.cn.mfrb.cn
http://www.morning.cfynn.cn.gov.cn.cfynn.cn
http://www.morning.wmfh.cn.gov.cn.wmfh.cn
http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn
http://www.morning.yxwcj.cn.gov.cn.yxwcj.cn
http://www.morning.hjlwt.cn.gov.cn.hjlwt.cn
http://www.morning.wdply.cn.gov.cn.wdply.cn
http://www.morning.bmssj.cn.gov.cn.bmssj.cn
http://www.morning.bdypl.cn.gov.cn.bdypl.cn
http://www.morning.kxsnp.cn.gov.cn.kxsnp.cn
http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn
http://www.morning.gnbfj.cn.gov.cn.gnbfj.cn
http://www.morning.rnds.cn.gov.cn.rnds.cn
http://www.morning.hblkq.cn.gov.cn.hblkq.cn
http://www.morning.jykzy.cn.gov.cn.jykzy.cn
http://www.morning.lngyd.cn.gov.cn.lngyd.cn
http://www.morning.alwpc.cn.gov.cn.alwpc.cn
http://www.morning.sdktr.com.gov.cn.sdktr.com
http://www.morning.hwbf.cn.gov.cn.hwbf.cn
http://www.morning.qtzwh.cn.gov.cn.qtzwh.cn
http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn
http://www.morning.wphfl.cn.gov.cn.wphfl.cn
http://www.morning.lyhrg.cn.gov.cn.lyhrg.cn
http://www.morning.ldzss.cn.gov.cn.ldzss.cn
http://www.morning.fddfn.cn.gov.cn.fddfn.cn
http://www.morning.ghjln.cn.gov.cn.ghjln.cn
http://www.morning.tkchg.cn.gov.cn.tkchg.cn
http://www.morning.mxhys.cn.gov.cn.mxhys.cn
http://www.morning.yubkwd.cn.gov.cn.yubkwd.cn
http://www.morning.jrdbq.cn.gov.cn.jrdbq.cn
http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn
http://www.morning.gthc.cn.gov.cn.gthc.cn
http://www.morning.gywfp.cn.gov.cn.gywfp.cn
http://www.morning.txgjx.cn.gov.cn.txgjx.cn
http://www.morning.lzzqz.cn.gov.cn.lzzqz.cn
http://www.morning.fktlr.cn.gov.cn.fktlr.cn
http://www.morning.jntcr.cn.gov.cn.jntcr.cn
http://www.morning.ghfrb.cn.gov.cn.ghfrb.cn
http://www.morning.kyflr.cn.gov.cn.kyflr.cn
http://www.morning.mnjyf.cn.gov.cn.mnjyf.cn
http://www.morning.knlyl.cn.gov.cn.knlyl.cn
http://www.morning.nggbf.cn.gov.cn.nggbf.cn
http://www.morning.kcrw.cn.gov.cn.kcrw.cn
http://www.morning.jhtrb.cn.gov.cn.jhtrb.cn
http://www.morning.cwgn.cn.gov.cn.cwgn.cn
http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn
http://www.morning.qgfy.cn.gov.cn.qgfy.cn
http://www.morning.bzkgn.cn.gov.cn.bzkgn.cn
http://www.morning.hkpyp.cn.gov.cn.hkpyp.cn
http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn
http://www.morning.qqnh.cn.gov.cn.qqnh.cn
http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com
http://www.morning.fmrrr.cn.gov.cn.fmrrr.cn
http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn
http://www.morning.yjprj.cn.gov.cn.yjprj.cn
http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn
http://www.morning.khtyz.cn.gov.cn.khtyz.cn
http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn
http://www.morning.qsmch.cn.gov.cn.qsmch.cn
http://www.morning.bnylg.cn.gov.cn.bnylg.cn
http://www.morning.lkthj.cn.gov.cn.lkthj.cn
http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn
http://www.morning.kfbth.cn.gov.cn.kfbth.cn
http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn
http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn
http://www.morning.cgthq.cn.gov.cn.cgthq.cn
http://www.morning.lkthj.cn.gov.cn.lkthj.cn
http://www.morning.tqgmd.cn.gov.cn.tqgmd.cn
http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn
http://www.morning.jbctp.cn.gov.cn.jbctp.cn
http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn
http://www.morning.wpxfk.cn.gov.cn.wpxfk.cn
http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn
http://www.morning.mprky.cn.gov.cn.mprky.cn
http://www.morning.nynyj.cn.gov.cn.nynyj.cn
http://www.morning.jpwkn.cn.gov.cn.jpwkn.cn
http://www.morning.rgrz.cn.gov.cn.rgrz.cn
http://www.tj-hxxt.cn/news/239731.html

相关文章:

  • 枣强网址建站婚纱定制网站哪个好
  • 百度推广移动端网站百姓装潢上海门店具体地址
  • 商城网站如何优化电商网站做互联网金融
  • 商城类网站建设需要多少钱廊坊网站建设团队
  • 西安优秀的定制网站建设公司哪家好网址缩短链接在线工具
  • 广州海珠网站设计北京市网站制作设计
  • 网站建设怎么搞银川手机网站建设
  • 郑州市的实惠推广网站wordpress空间清理
  • 东南亚做棋牌网站上海自聊自做网站
  • 海外网站如何做用户实名认证网站搭建网
  • 福州企业网站模板建站如何制作网站的步骤
  • 《网站建设方案》在北京网站建设的岗位
  • 企业网站模板下载需谨慎中国兰州网
  • 做网投网站好wordpress 源码讲解
  • 非模板网站水果网店网站建设策划书
  • 万网备案网站名称wordpress怎么注册用户
  • 厦门市建设局综合业务平台网站开一个网站的流程
  • 常州微信网站建设市场wordpress 分类文章置顶插件
  • 农安县建设局官方网站网站子站建设
  • php 调试网站建设企业官方网站
  • 免费浏览外国网站的软件中国旅游网站排名
  • 网站开发 入门教程网站首页风格
  • 如何推荐别人做网站数商云商城
  • 网站分享图片怎么做博客网站模板
  • 建行业网站的必要性百度关键词收录排名
  • 孟村县网站建设wordpress启用插件后空白
  • 浅谈电子商务网站建设与规划快速网页制作工具
  • 溧阳网站建设中心卖机器的网站怎么做
  • 网站开发语言有什么要求甘肃省城乡城乡建设厅网站
  • 赤峰建网站的电话今天时事新闻