草庐IT

android - 用于点对点连接的 Wi-Fi 与蓝牙

coder 2023-12-08 原文

我正在为一个教育项目在 android 中开发一个 p2p 应用程序,我想在这个项目中将附近学生的 android 手机分组,并在大学校园内交换传感器数据。

现在有一些注意事项:

  1. 设备将自动相互发现并在发现后连接并交换数据。
  2. 该流程运行时间很长,每天可能运行 4-8 小时。 (周期性感知数据并交换的过程)

现在可以使用蓝牙或 WiFi 形成 p2p 组(不是 WiFi Direct ,考虑到手机连接在校园 WiFi 上,通过 WiFi 的简单 UDP 数据包)。

在这种情况下,就可靠性、手机的功耗、可扩展性和您可以建议的任何其他方面而言,使用蓝牙和 WiFi 的优缺点是什么。

最佳答案

在其他答案和输入中,我会添加这个答案。

首先,在我们选择 WiFi 或蓝牙之前,我们需要找出这两种技术之间的区别。

我制作了比较图表,其中涵盖了您可能需要的有关项目的一些重要信息。

Note: There are different versions of Bluetooth's and WiFi, this chart is to represent the the general picture of Standard Bluetooth, Bluetooth v4 and WiFi. It is always suggested to refer to manufacture specification of each technology.

从图表中我们可以得出结论,蓝牙的功耗比 WiFi 低,但另一方面,WiFi 的带宽比蓝牙大。

范围通常只是近似值,很多因素会影响范围,例如人体、障碍物、位置(内部或外部),如果在内部;建筑物内部的结构类型和 Material ,来自其他来源和设备的噪音等。

(*) 关于可扩展性,我已经测试了 WiFi 和蓝牙 v4,这两个系统都有多达 8 个设备,其中一个是主机(组所有者、服务器)设备,另外 7 个是 guest (客户端)。见下图。

关于可靠性,使用蓝牙 v4 我遇到了一些时间连接问题,但当它工作时一切都很好。

Note: Bluetooth v4 is not back compatible with older versions of Bluetooth, so if your host is Bluetooth v4 than all other clients should have Bluetooth v4 or vice versa.

所以我不会说哪个最好,但如果你需要比蓝牙更长的电池生命周期和更轻的数据通信方式。无论是蓝牙还是 W​​iFi,您都可能需要从蓝牙开始并对其进行测试,如果您对它满意而不是保留它,否则切换到 WiFi。

如果您想构建自己的代码,可以使用我之前用于另一所大学研究的代码示例 project .如上图所示,它基于 8 个手机(主机和客户端),我们收集传感器信息并使用蓝牙 4 连接将其发送到主机手机。我们使用的源代码可以在 here 中找到。 .同一个项目有 WiFi 和其他类型的连接。

Android 官方谷歌文档有一些关于 WiFi 点对点连接的信息和代码示例,您可以引用 code 的示例

关于收集您的传感器数据并将这些数据发送到一台设备。您可以添加一种开始收集传感器或任何数据的方法,并在成功建立连接后开始将其发送到其他设备。

正如其他人所建议的那样 https://developers.google.com/nearby也是一种方式。

关于android - 用于点对点连接的 Wi-Fi 与蓝牙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36276883/

有关android - 用于点对点连接的 Wi-Fi 与蓝牙的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  4. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  5. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  6. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  7. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  8. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  9. ruby-on-rails - 连接字符串时如何在 <%=%> block 内输出 html_safe? - 2

    考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://

  10. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

随机推荐