天道酬勤,学无止境

bluetooth

如何估计两个Android设备之间的距离? (蓝牙优先)(How to estimate distance between two android devices? (bluetooth preferred))

问题 目标是没有真正的距离。 这是更简单的事情。 目标是检查另一个设备是否非常非常接近。 对或错。 假设 10 或 15 厘米很近,所以我们的检查是正确的,任何更远的设备都没有通过检查,这是错误的。 我的第一种方法是使用 api 的方法fetchUuidsWithSdp()但它失败了! 无论是距离几厘米的设备还是在大房间的另一端,延迟似乎都是一样的! 即使没有蓝牙,任何解决方案都是可以接受的。 例如,我完全不熟悉wifi direct p2p协议。 也许那里可能有一些有用的东西来粗略估计距离。 编辑:我正在阅读有关接收信号强度指示器( RSSI )的信息。 这可以用于我们的特殊情况,粗略估计设备之间的距离。 但也许可以结合一些东西来提高准确性。 编辑:我将 Ralgha 的答案用于测试。 我确实建立了一个连接,并且有一个在设备之间进行乒乓的小协议。 当以1 字节进行乒乓时,非常接近时平均延迟为 22.6000 毫秒,而在房间的另一个角落时为 22.6087 毫秒。 当以1024 字节进行乒乓时,距离非常近时平均延迟为 40.3173 毫秒,而在房间的另一个角落时则更小,为 32.3138 毫秒。 毕竟,延迟确实不携带任何有关距离的信息! 谢谢! 回答1 你可以用声音测量距离。 回答2 我研究了蓝牙定位,它和检测信号强度一样简单。 为了获得真正准确的结果,您还需要考虑您使用的手机类型

2021-12-09 08:10:35    分类:技术分享    android   bluetooth   distance   wifi-direct

Java (J2SE) 和蓝牙(Java (J2SE) and Bluetooth)

问题 我想写一些小程序。 它将使用蓝牙适配器在我的计算机(笔记本电脑)上运行,然后发现所有可见的蓝牙适配器(电话、打印机、其他计算机等),但我之前没有在 Java 中使用蓝牙。 请帮我找到起点。 我必须先下载哪些 SDK 或库? 读什么文学? 我在谷歌上搜索了 BlueCove,但它不支持我的三星 D600,所以我无法测试我的应用程序。 回答1 此 java 示例将发现所有可见设备,并且它适用于 BlueCove 和 Avetana 库(http://www.avetana-gmbh.de/avetana-gmbh/produkte/jsr82.eng.xml): http://www.jsr82.com/jsr-82-sample-device-discovery/ 回答2 好的,抱歉打扰了。 我找到了答案,它是 BlueCove。 安装额外的库后,它现在可以在 Linux Mint 7 上完美运行。 甚至,未列入兼容性列表的三星D600也被完美发现。 测试程序输出: run: BlueCove version 2.1.0 on bluez Address: 0006C990021D Name: hostname-0 Starting device inquiry... Device discovered: 0015B95BEA0F INQUIRY_COMPLETED

2021-12-08 22:00:26    分类:技术分享    bluetooth   java

使用蓝牙扫描仪/键盘在 iOS/Safari 上收听 HTML/JavaScript 中的按键,而无需关注某个字段(Listen to keypress in HTML/JavaScript on iOS/Safari with Bluetooth Scanner/Keyboard without having to focus a field)

问题 我有以下设置: iPad 和 Safari 浏览器运行 webb 应用程序。 蓝牙条码扫描仪与 iPad 连接/配对。 我的 web 应用程序全局侦听按键事件,这使我可以触发扫描功能,而无需用户将焦点放在 webb 应用程序中的文本字段。 当在带有 USB 扫描仪的桌面上运行应用程序时,上述工作正常。 我的问题是,当蓝牙扫描仪连接时,应用程序不会触发 keydown(press/up) 事件,直到文本字段聚焦在 iPad 上。 有可能实现吗? 不久前的一个相关问题:如何添加一个 Javascript 侦听器来捕获从蓝牙条码扫描仪到 iPad 的输入? 谢谢/E 回答1 我相信对于移动版 Safari(以及大多数其他 iOS 移动浏览器),只有在表单输入处于焦点状态时,Web 应用程序才能检测到按键。 您的设备(没有外部键盘)无法在没有选择表单输入的情况下进行按键输入,因为键盘无法启动。

2021-12-08 18:56:34    分类:技术分享    javascript   ios   ipad   bluetooth   barcode-scanner

在 Android 2.0 中查找 UUID(Finding UUIDs in Android 2.0)

问题 我正在编写一个需要在 Android 2.0 中运行的程序。 我目前正在尝试将我的 android 设备连接到嵌入式蓝牙芯片。 我已获得有关使用 fetchuidsWithSDP() 或 getUuids() 的信息,但我阅读的页面解释说这些方法隐藏在 2.0 SDK 中,必须使用反射调用。 我不知道那是什么意思,也没有解释。 给出了示例代码,但背后的解释很少。 我希望有人能帮助我了解这里实际发生的事情,因为我对 Android 开发非常陌生。 String action = "android.bleutooth.device.action.UUID"; IntentFilter filter = new IntentFilter( action ); registerReceiver( mReceiver, filter ); 我读过的页面还说,在第一行中,bluetooth 故意拼写为“bleutooth”。 如果有人可以解释这一点,我将不胜感激,除非开发人员打错了字,否则这对我来说毫无意义。 private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive( Context context, Intent intent ) {

2021-12-08 17:43:25    分类:技术分享    android   bluetooth   uuid

iPhone 和 Mac 之间的通信(Communicating between iPhone and Mac)

问题 我计划创建一个应用程序,从 iPhone 获取数据并将其发送到 Mac 上的另一个应用程序。 陀螺仪数据也将被发送。 我假设这最好通过蓝牙连接来完成。 任何人都可以请给我一些关于我应该如何构建应用程序或者是否可能的信息? 回答1 我认为实现这一目标的最理想方法是通过 Bonjour 协议。 这里有一篇关于这个主题的很棒的文章,http://mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/。 在 iOS 中使用 Bonjour 的好处是它也可以通过蓝牙工作。 希望这可以帮助 ! 回答2 在这里,我创建了在 iphone 和 iMAC 之间交换数据的示例应用程序。 我只用wifi测试过。 https://github.com/boobalaninfo/Bonjour-iOS-MAC-Apps

2021-12-08 17:39:05    分类:技术分享    ios   macos   networking   bluetooth

检测对 BluetoothAdapter 所做的状态更改?(Detecting state changes made to the BluetoothAdapter?)

问题 我有一个带有按钮的应用程序,用于打开和关闭 BT。 我在那里有以下代码; public void buttonFlip(View view) { flipBT(); buttonText(view); } public void buttonText(View view) { Button buttonText = (Button) findViewById(R.id.button1); if (mBluetoothAdapter.isEnabled() || (mBluetoothAdapter.a)) { buttonText.setText(R.string.bluetooth_on); } else { buttonText.setText(R.string.bluetooth_off); } } private void flipBT() { if (mBluetoothAdapter.isEnabled()) { mBluetoothAdapter.disable(); } else { mBluetoothAdapter.enable(); } } 我正在调用按钮 Flip,它翻转 BT 状态,然后调用 ButtonText,它应该更新 UI。 但是,我遇到的问题是,BT 需要几秒钟才能打开 - 在这几秒钟内,BT 状态未启用,使我的按钮显示蓝牙关闭,即使它将在

2021-12-08 16:57:24    分类:技术分享    java   android   bluetooth

什么触发 BluetoothDevice.ACTION_ACL 广播?(What triggers the BluetoothDevice.ACTION_ACL broadcasts?)

问题 我想知道远程物理设备中的哪些事件会触发侦听设备中的ACTION_ACL_CONNECTED和ACTION_ACL_DISCONNECTED 。 我的测试结果毫无意义。 我在几分米内收集了几个设备: 运行 Android 3.1 的 Galaxy Tab P7500 运行 Android 2.2 的 i5500 手机带有蓝牙 USB 加密狗的 WinXP PC 两个带开/关按钮的耳机 首先,我手动与选项卡中的所有设备配对。 PC 和手机均未与 Tab 以外的任何其他设备配对。 (其中一个耳机永远无法通过选项卡以任何方式找到,但可以通过手动和编程方式轻松地从手机中找到)。 然后我有一个简单的应用程序来开始发现,它侦听和显示 ACL 广播。 这就是发生的事情(每次都一样,它的疯狂是一致的): 启用所有设备的选项卡中的startDiscovery() : - PC 是唯一找到的设备在 PC 上禁用蓝牙: - 选项卡上没有反应在 PC 上启用蓝牙: - 选项卡上没有反应 开机耳机1日时间: - ACTION_ACL_CONNECTED上的Tab 关闭耳机: - 选项卡上没有反应再次打开耳机: - 在选项卡上快速连续ACTION_ACL_DISCONNECTED和ACTION_ACL_CONNECTED 在选项卡上禁用蓝牙: - 选项卡上没有反应在选项卡上启用蓝牙: -

2021-12-08 16:08:55    分类:技术分享    android   bluetooth   broadcastreceiver   device

Android 蓝牙 SDP 无法识别 JAVAME 中广告的服务(Android bluetooth SDP does not recognize service advertised in JAVAME)

问题 我正在为我的理学硕士开发蓝牙应用程序。 结束项目。 它包括一个用JAVA ME实现的服务器和一个用Android编写的客户端。 问题是 Android SDP似乎无法识别我的 JAVA ME 服务器的ServiceRecord 。 如果我在客户端中使用BluetoothDevice.getUuids()和BluetoothDevice.fetchUuidsWithSdp()方法,它们会返回一组UUIDs ,但我的服务的UUID不在其中,因此我无法连接到它。 这是JAVAME服务器示例的代码: /*IMPORTS*/ public class StackOverFlowServer extends MIDlet { Display mDisplay; Form mForm; LocalDevice local; StreamConnectionNotifier server; ServiceRecord sr; String conURL; StreamConnection conn; public StackOverFlowServer() { mDisplay = Display.getDisplay(this); mDisplay.setCurrent(mForm); mForm = new Form(null); conURL = "btspp://localhost

2021-12-08 15:21:51    分类:技术分享    android   service   java-me   bluetooth

蓝牙SPP收到一些包帧会丢失还是?(Bluetooth SPP receive some the package frame can lost or?)

问题 我使用android示例代码进行修改。 只想收包裹但是,我的代码只在这里修改 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_STATE_CHANGE: if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1); switch (msg.arg1) { case BluetoothChatService.STATE_CONNECTED: mTitle.setText(R.string.title_connected_to); mTitle.append(mConnectedDeviceName); mConversationArrayAdapter.clear(); break; case BluetoothChatService.STATE_CONNECTING: mTitle.setText(R.string.title_connecting); break; case BluetoothChatService.STATE_LISTEN: case BluetoothChatService.STATE

2021-12-08 12:17:15    分类:技术分享    android   bluetooth

来自 Android 蓝牙不安全 Rfcomm 的“服务发现失败”("Service discovery failed" from Android Bluetooth Insecure Rfcomm)

问题 有谁知道如何在使用任意声明的服务名称时在 API 级别 2.3.3 的 2 个 Android 设备之间创建不安全的 RFCOMM 连接? (不是随机或更改的服务名称,只是我自己定义的服务名称) 细节 我正在尝试在 2 个 Android 设备之间创建不安全的 Rfcomm 连接:Droid X2 和 Asus Transformer。 我假设这两种设备都具有 Android 2.3.3 级别的功能,以实际获得使用不安全 Rfcomm 的能力。 当我尝试按照此处所述创建蓝牙连接时,使用现在公开的 createInsecureRfcommSocketToServiceRecord() 和 listenUsingInsecureRfcommWithServiceRecord(SERVICE, UUID),我收到报告: java.io.IOException: Service discovery failed at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:377) at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201) at com.s4d.bluenomad.DeviceConnections

2021-12-08 07:50:34    分类:技术分享    android   bluetooth   insecure-connection