是否可以检测并排放置的Android设备

时间:2017-07-12 10:32:54

标签: android proximity

我正在开发一个Android应用程序,需要将设备并排放置和/或相互上下放置。

我知道我可以使用Nearby API来检测设备"附近"但是我需要更多的东西"更精细的粒度"。

我的应用程序需要能够识别位于左侧,上方,右侧或下方的设备。虽然所有设备都平放在桌子上(例如)。

我在网络上找不到任何描述此用例的内容。

有可能吗?

更新

我的用例是我希望Android设备能够检测到任意数量的"其他设备"向左或向右铺设。这些设备将水平放置一个小的"每个人之间的差距。

就像你可以布置儿童的字母块来拼出一个单词或短语,或者编号的块来制作一个总和一样。

设备线不仅应该能够检测到它们左边和右边的直接邻居,两端的两个设备应该能够检测到它们是线路的起点和终点(从左到右读取)。

6 个答案:

答案 0 :(得分:5)

使用接近传感器是解决问题的可能方法。 TYPE_PROXIMITY将给出距离近物体的距离。 TYPE_MAGNETIC_FIELD给出x / y / z上的地磁场强度。

更多阅读Position Sensors

答案 1 :(得分:2)

一个想法,如果它与您的用例相关:

  • 设置阶段
    • 以"配对模式"。
    • 在每台设备上启动您的应用
    • 每个设备都会显示一个QR码,其中包含与设备通信所需的密钥(例如通过Firebase)和屏幕详细信息:大小(以像素为单位)。它还会在屏幕边界绘制一个矩形。
    • 此布局外部的另一部手机会将您的应用作为"主人"运行,从上方拍摄手机照片。
    • 现在您需要编写一个算法来识别屏幕及其位置,方向并提取QR码进行分析。不容易,但可行。
  • 互动阶段
    • 现在所有的手机(这应该适用于两部以上的手机)可以协作屏幕来显示同一部电影的部分内容。

答案 2 :(得分:2)

  1. 制作自己的模拟GPS(确切地说是本地PS)。我没有这方面的链接,但它绝对可能。了解GPS的工作原理。 Wifi和蓝牙是信号。但你知道还有什么信号吗?
  2. 答:声音

    让每部手机依次发出大嘟嘟声并使用接收器测量音频强度。这可能比wifi /蓝牙更好。一旦你测量了每对手机之间的相对距离,只需要一个好的算法来找到相对位置

    1. 可能的替代解决方案:使用图像处理。获取OpenCV for Android之类的内容并将一部手机设置为主人。这仅适用于2D布局。

    2. 另一个"想法" - 使用相机。将电路板粘贴在表面上,每个角上有4个QR码。 (这有助于识别手机的边缘和方向)。如果您正在寻找3D布局并且手机具有足够的中间空间,您可以在每部手机后面贴上QR并在每部手机的屏幕上显示QR。

    3. 所有这些都是解决方案。也许你可以使用个人。也许你可以使用一个组合。谁知道呢。

答案 3 :(得分:1)

似乎没有,如果您只有2个设备,但是如果您有任何信号的外部信号源(具有已知位置)(音频,振动,BT或WiFi无线电等),可以通过设备以足够的准确度检测到,设备时间是同步的,您可以这样比较两个设备上的信号启动时间(或信号强度),如下图所示:

Example

或者,如果您可以向其中一个设备添加一些传感器,则可以创建“其他设备定位器”,例如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信号的旅行时间。