是否可以检测 Android 并排放置的设备
Is it possible to detect Android devices laying side by side
我正在开发一个 Android 应用程序,它要求设备并排放置 and/or 上下。
我知道我可以使用附近 API 来检测设备 "Nearby" 但是我还需要一些东西 "Finer Grained".
我的应用程序需要能够识别位于左侧、上方、右侧或下方的设备。当所有设备都平放在 table 上时(例如)。
我在网上找不到任何描述此用例的内容。
可能吗?
更新
我的用例是,我希望 Android 设备能够检测到位于其左侧或右侧的任意数量的 "Other Devices"。这些设备将水平放置,每个设备之间有 "small" 个间距。
这与您布置儿童字母积木以拼出单词或短语,或布置编号积木以计算总和的方式相同。
不仅设备线应该能够检测到它们左右两侧的直接邻居,而且两端的两个设备都应该能够检测到它们是设备的起点和终点(从左到右阅读)线.
似乎不是,如果您只有 2 个设备,但如果您有任何信号(音频、振动、BT 或 WiFi 无线电等)的外部来源(已知位置),这些信号可以被具有以下功能的设备检测到足够的准确性,并且设备时间是同步的,您可以像这张照片一样比较两个设备上的信号开始时间(或信号强度):
或者,如果您可以向其中一个设备添加一些传感器,则可以创建 "other device locator",例如 this 声音定位器。
更新
在更新的公式中,问题也无法解决:可以确定哪两个设备在边缘,但无法确定哪个在左侧,哪个在右侧。例如,至少有一个设备知道它位于最左边是必要的 - 然后其他设备,例如,产生声音,其他设备接收它并根据到达时间的差异确定它们的顺序。但是锚点和时间同步是必须的
使用接近传感器可能是解决您问题的方法。 TYPE_PROXIMITY will gives the distance from a near by object. TYPE_MAGNETIC_FIELD 给出 x/y/z.
上的地磁场强度
更多阅读Position Sensors。
一个想法,如果它与您的用例相关:
- 设置阶段
- 在 "pairing mode" 中的每台设备上启动您的应用程序。
- 每台设备都会显示一个二维码,其中包含与设备通信(例如通过 Firebase)所需的密钥,以及屏幕详细信息:尺寸(以像素为单位)。它还会在屏幕边界处绘制一个矩形。
- 此布局外部的一个不同 phone 将 运行 您的应用作为 "master",从上方拍摄 phone 的照片。
- 现在你需要编写一个算法来识别屏幕及其位置、方向并提取二维码进行分析。不容易,但可行。
- 互动阶段
- 现在所有 phone(这应该适用于两个以上的 phone)可以协作屏幕来显示同一部电影的多个部分,例如。
我有办法,但可能需要一些工作。首先通过获取设备方向并使用加速度计或旋转矢量检查俯仰、滚动等来检查 2 个设备是否正在放置。
当您确定他们正在使用 BT 或 wifi 从一台设备向另一台设备发送数据时。数据应包括发送时间。检查其他设备上的检索时间,您还应该检查发送和检索数据的延迟。如果设备之间的小距离差异可以有明显的毫秒时间差异,则很容易检查它们的接近程度。您也可以要求用户将他们的设备彼此保持 1 米或固定距离,以获得您发送给其他人的 BT 或 wifi 信号的旅行时间。
通过低估您的用例,可以使用 Nearby Api 和其他技术找到主机设备周围的设备数量。但是找出每边有多少个设备!!!我不认为当前的移动硬件和技术是可能的。因为,综合考虑所有因素,磁传感器只是最不可能的解决方案。但是目前的手机没有这样的能力。
我根据以上回答提出以下几点。
TYPE_ACCELEROMETER, TYPE_LINEAR_ACCELERATION, TYPE_MAGNETIC_FIELD, TYPE_ORIENTATION
这些传感器对设备周围的磁场作出反应(罗盘对磁铁作出反应)。您可以尝试使用 TYPE_MAGNETIC_FIELD
的应用程序,测试它在靠近它时对其他设备的反应(我认为它会反应)。
但我想在这里说明的一点是,如果将三个设备放在一边,将 4 个设备放在另一边,MAGNETIC_FIELD
传感器会读取相对磁场。所以我们无法确定每一方的设备数量,除非您进行了一些科学计算。
第二点是,有人建议TYPE_PROXIMITY
传感器,但这并不是为了这个目的。当前的手机测量物体相对于设备屏幕的距离(以厘米为单位)。此传感器通常用于确定听筒是否放在人耳边。
另一种可能性最小的是使用位置传感器,它可以识别相对于您的设备坐标的坐标,您可以使用 NFC 在每个设备坐标与主机之间进行通信。但问题是,您的用例表明这些设备彼此非常接近,因此使用定位服务无法测量距离。
总而言之,使用当前的移动硬件无法识别主机设备每一侧的每个设备的数量。它将可以通过使用扩展移动功能的外部传感器进行存档。例如,一个 phone 案例配备了这种能力,这也将 window 开放给其他用例和应用程序。
- 制作您自己的 Mock GPS(准确地说是本地 PS)。我没有这个 link 但绝对有可能。查看 GPS 的工作原理以获得灵感。 Wifi和蓝牙是信号。但你知道还有什么是信号吗?
答:声音
让每个 phone 轮流发出较大的哔哔声,并使用接收器测量音频强度。这可能比 wifi/bluetooth 更有效。一旦你测量了每对 phone 之间的相对距离,只需要一个好的算法就可以找到相对位置
可能的替代解决方案:使用图像处理。获取 OpenCV for Android 之类的东西并设置一个 phone 作为主控。这仅适用于二维布局。
另一个 "idea" - 使用相机。将一块板贴在您的表面上,每个角上有 4 个 QR 码。 (这将有助于识别 phone 的边缘和方向)。如果您正在寻找 3D 布局并且 phone 之间有足够的 space,您可以在每个 phone 后面粘贴一个二维码并在每个 phone 的屏幕上显示一个二维码=37=].
这些都是解决办法。也许你可以使用单独的。也许你可以使用组合。谁知道呢
我正在开发一个 Android 应用程序,它要求设备并排放置 and/or 上下。
我知道我可以使用附近 API 来检测设备 "Nearby" 但是我还需要一些东西 "Finer Grained".
我的应用程序需要能够识别位于左侧、上方、右侧或下方的设备。当所有设备都平放在 table 上时(例如)。
我在网上找不到任何描述此用例的内容。
可能吗?
更新
我的用例是,我希望 Android 设备能够检测到位于其左侧或右侧的任意数量的 "Other Devices"。这些设备将水平放置,每个设备之间有 "small" 个间距。
这与您布置儿童字母积木以拼出单词或短语,或布置编号积木以计算总和的方式相同。
不仅设备线应该能够检测到它们左右两侧的直接邻居,而且两端的两个设备都应该能够检测到它们是设备的起点和终点(从左到右阅读)线.
似乎不是,如果您只有 2 个设备,但如果您有任何信号(音频、振动、BT 或 WiFi 无线电等)的外部来源(已知位置),这些信号可以被具有以下功能的设备检测到足够的准确性,并且设备时间是同步的,您可以像这张照片一样比较两个设备上的信号开始时间(或信号强度):
或者,如果您可以向其中一个设备添加一些传感器,则可以创建 "other device locator",例如 this 声音定位器。
更新
在更新的公式中,问题也无法解决:可以确定哪两个设备在边缘,但无法确定哪个在左侧,哪个在右侧。例如,至少有一个设备知道它位于最左边是必要的 - 然后其他设备,例如,产生声音,其他设备接收它并根据到达时间的差异确定它们的顺序。但是锚点和时间同步是必须的
使用接近传感器可能是解决您问题的方法。 TYPE_PROXIMITY will gives the distance from a near by object. TYPE_MAGNETIC_FIELD 给出 x/y/z.
上的地磁场强度更多阅读Position Sensors。
一个想法,如果它与您的用例相关:
- 设置阶段
- 在 "pairing mode" 中的每台设备上启动您的应用程序。
- 每台设备都会显示一个二维码,其中包含与设备通信(例如通过 Firebase)所需的密钥,以及屏幕详细信息:尺寸(以像素为单位)。它还会在屏幕边界处绘制一个矩形。
- 此布局外部的一个不同 phone 将 运行 您的应用作为 "master",从上方拍摄 phone 的照片。
- 现在你需要编写一个算法来识别屏幕及其位置、方向并提取二维码进行分析。不容易,但可行。
- 互动阶段
- 现在所有 phone(这应该适用于两个以上的 phone)可以协作屏幕来显示同一部电影的多个部分,例如。
我有办法,但可能需要一些工作。首先通过获取设备方向并使用加速度计或旋转矢量检查俯仰、滚动等来检查 2 个设备是否正在放置。
当您确定他们正在使用 BT 或 wifi 从一台设备向另一台设备发送数据时。数据应包括发送时间。检查其他设备上的检索时间,您还应该检查发送和检索数据的延迟。如果设备之间的小距离差异可以有明显的毫秒时间差异,则很容易检查它们的接近程度。您也可以要求用户将他们的设备彼此保持 1 米或固定距离,以获得您发送给其他人的 BT 或 wifi 信号的旅行时间。
通过低估您的用例,可以使用 Nearby Api 和其他技术找到主机设备周围的设备数量。但是找出每边有多少个设备!!!我不认为当前的移动硬件和技术是可能的。因为,综合考虑所有因素,磁传感器只是最不可能的解决方案。但是目前的手机没有这样的能力。
我根据以上回答提出以下几点。
TYPE_ACCELEROMETER, TYPE_LINEAR_ACCELERATION, TYPE_MAGNETIC_FIELD, TYPE_ORIENTATION
这些传感器对设备周围的磁场作出反应(罗盘对磁铁作出反应)。您可以尝试使用 TYPE_MAGNETIC_FIELD
的应用程序,测试它在靠近它时对其他设备的反应(我认为它会反应)。
但我想在这里说明的一点是,如果将三个设备放在一边,将 4 个设备放在另一边,MAGNETIC_FIELD
传感器会读取相对磁场。所以我们无法确定每一方的设备数量,除非您进行了一些科学计算。
第二点是,有人建议TYPE_PROXIMITY
传感器,但这并不是为了这个目的。当前的手机测量物体相对于设备屏幕的距离(以厘米为单位)。此传感器通常用于确定听筒是否放在人耳边。
另一种可能性最小的是使用位置传感器,它可以识别相对于您的设备坐标的坐标,您可以使用 NFC 在每个设备坐标与主机之间进行通信。但问题是,您的用例表明这些设备彼此非常接近,因此使用定位服务无法测量距离。
总而言之,使用当前的移动硬件无法识别主机设备每一侧的每个设备的数量。它将可以通过使用扩展移动功能的外部传感器进行存档。例如,一个 phone 案例配备了这种能力,这也将 window 开放给其他用例和应用程序。
- 制作您自己的 Mock GPS(准确地说是本地 PS)。我没有这个 link 但绝对有可能。查看 GPS 的工作原理以获得灵感。 Wifi和蓝牙是信号。但你知道还有什么是信号吗?
答:声音
让每个 phone 轮流发出较大的哔哔声,并使用接收器测量音频强度。这可能比 wifi/bluetooth 更有效。一旦你测量了每对 phone 之间的相对距离,只需要一个好的算法就可以找到相对位置
可能的替代解决方案:使用图像处理。获取 OpenCV for Android 之类的东西并设置一个 phone 作为主控。这仅适用于二维布局。
另一个 "idea" - 使用相机。将一块板贴在您的表面上,每个角上有 4 个 QR 码。 (这将有助于识别 phone 的边缘和方向)。如果您正在寻找 3D 布局并且 phone 之间有足够的 space,您可以在每个 phone 后面粘贴一个二维码并在每个 phone 的屏幕上显示一个二维码=37=].
这些都是解决办法。也许你可以使用单独的。也许你可以使用组合。谁知道呢