我正在开发一个Android应用程序,需要将设备并排放置和/或相互上下放置。
我知道我可以使用Nearby API来检测设备"附近"但是我需要更多的东西"更精细的粒度"。
我的应用程序需要能够识别位于左侧,上方,右侧或下方的设备。虽然所有设备都平放在桌子上(例如)。
我在网络上找不到任何描述此用例的内容。
有可能吗?
更新
我的用例是我希望Android设备能够检测到任意数量的"其他设备"向左或向右铺设。这些设备将水平放置一个小的"每个人之间的差距。
就像你可以布置儿童的字母块来拼出一个单词或短语,或者编号的块来制作一个总和一样。
设备线不仅应该能够检测到它们左边和右边的直接邻居,两端的两个设备应该能够检测到它们是线路的起点和终点(从左到右读取)。
答案 0 :(得分:5)
使用接近传感器是解决问题的可能方法。 TYPE_PROXIMITY将给出距离近物体的距离。 TYPE_MAGNETIC_FIELD给出x / y / z上的地磁场强度。
更多阅读Position Sensors。
答案 1 :(得分:2)
一个想法,如果它与您的用例相关:
答案 2 :(得分:2)
答:声音
让每部手机依次发出大嘟嘟声并使用接收器测量音频强度。这可能比wifi /蓝牙更好。一旦你测量了每对手机之间的相对距离,只需要一个好的算法来找到相对位置
可能的替代解决方案:使用图像处理。获取OpenCV for Android之类的内容并将一部手机设置为主人。这仅适用于2D布局。
另一个"想法" - 使用相机。将电路板粘贴在表面上,每个角上有4个QR码。 (这有助于识别手机的边缘和方向)。如果您正在寻找3D布局并且手机具有足够的中间空间,您可以在每部手机后面贴上QR并在每部手机的屏幕上显示QR。
所有这些都是解决方案。也许你可以使用个人。也许你可以使用一个组合。谁知道呢。
答案 3 :(得分:1)
似乎没有,如果您只有2个设备,但是如果您有任何信号的外部信号源(具有已知位置)(音频,振动,BT或WiFi无线电等),可以通过设备以足够的准确度检测到,设备时间是同步的,您可以这样比较两个设备上的信号启动时间(或信号强度),如下图所示:
或者,如果您可以向其中一个设备添加一些传感器,则可以创建“其他设备定位器”,例如this声音定位器。
更新
在更新的公式中,问题也无法解决:可以确定哪两个设备位于边缘,但您无法确定哪一个位于左侧,哪个位于右侧。例如,至少一个设备必须知道它是最左边的 - 然后其他设备产生声音,其他设备接收它并根据到达时间的差异确定它们的顺序。但是时间点和时间同步是必要的。
答案 4 :(得分:1)
通过低估您的使用案例,可以使用Nearby Api等其他技术查找主机设备所包围的设备数量。但是找到每边有多少台设备!我不认为使用当前的移动硬件和技术是可能的。因为,通过考虑所有因素,磁传感器只是最不可能的解决方案。但目前的手机没有这种能力。
基于以上答案,我提出了以下观点。
TYPE_ACCELEROMETER, TYPE_LINEAR_ACCELERATION, TYPE_MAGNETIC_FIELD, TYPE_ORIENTATION
这些传感器对设备周围的磁场作出反应(罗盘对磁铁起反应)。您可以使用TYPE_MAGNETIC_FIELD
尝试应用,测试它在接近它时对其他设备的反应(我认为它会做出反应)。
但我想在这里提出的观点是,如果你将三个设备放在一侧而将4个设备放到另一侧,MAGNETIC_FIELD
传感器会读取相对磁场。所以我们无法确定每个方面的设备如何,除非你做了一些科学的计算。
第二点是,有人提出了TYPE_PROXIMITY
传感器,但并不是为了达到这个目的。当前移动设备测量相对于设备的视图屏幕的对象的接近度(cm)。该传感器通常用于确定手机是否被握在人的耳边。
另一个最小的可能性是使用位置传感器,它可以识别相对于您的设备坐标的坐标,您可以使用NFC在每个设备坐标与主机之间进行通信。但问题是,您的用例表明这些设备彼此非常接近,因此使用位置服务并不是可测量的距离。
总之,使用当前的移动硬件无法识别主机设备每一侧的每个设备的数量。它可以通过使用外部传感器进行存档,从而扩展移动功能。例如,配备这种功能的手机外壳,这将打开其他用例和应用程序的窗口。
答案 5 :(得分:-1)
我认为一种方法,但可能需要一些工作。首先通过获取设备方向并使用加速度计或旋转矢量检查俯仰,滚动等来检查2个设备是否正在铺设。
如果您确定他们正在使用BT或wifi将数据从一个设备发送到另一个设备。数据应包括发送时间。检查其他设备上的检索时间,还应检查发送和检索数据的延迟。如果对于设备之间的小距离差异,您可以在ms内有明显的时间差异,那么很容易检查它们的接近程度。此外,您可能会要求用户将他们的设备彼此保持1米或固定距离,以获得您发送给其他人的BT或wifi信号的旅行时间。