Articles of bluetooth

如何解决在Android中发生的BluetoothGatt:android.os.DeadObjectException错误?

我按照蓝牙低功耗页面进行了Android 4.3 蓝牙低功耗开发 。 我已经可以打开蓝牙,扫描设备并连接到BLE设备。 但它在我尝试连接到设备 (device.connectGatt)和发现 BLE设备的服务 (mBluetoothGatt.discoverServices) 之前显示了BluetoothGatt : android.os.DeadObjectException 。 在BluetoothGatt : android.os.DeadObjectException之前BluetoothGatt : android.os.DeadObjectException它显示如下的日志 W/bt-smp (10670): io_cap = 4 W/bt-smp (10670): new io_cap = 4 p_cb->loc_enc_size = 16 W/BluetoothEventManager( 7380): CachedBluetoothDevice for device 20:73:20:00:6C:B4 not found, calling readPairedDevices(). D/BluetoothAdapterService(1108123608)(10670): Get Bonded Devices being called E/BluetoothEventManager( 7380): Got bonding state changed for […]

BLE设备自动与Android设备断开连接。 Android BLE

我正在使用Android Nexus 7通过Bluetooth Low Energy链接连接设备。 我能够连接设备,并且如果我不与设备进行任何通信,则保持连接。 但是,如果我通过单击按钮启用一个特定特征的通知,则设备将在数秒传输数据后与平板电脑断开连接。 有谁知道可能是什么问题? 非常感谢你! 这是我的代码: public boolean setCharacteristicNotification(boolean enabled){ if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, “BluetoothAdapter not initialized”); return false; } BluetoothGattService Service = mBluetoothGatt.getService(UUID_MY_SERVICE); if (Service == null) { Log.e(TAG, “service not found!”); return false; } BluetoothGattCharacteristic characteristic = Service.getCharacteristic(UUID_MY_CHARACTERISTIC); final int charaProp = characteristic.getProperties(); […]

当它们在范围内时,自动查找已配对的蓝牙设备

我不是蓝牙专家,并且想知道当它们彼此相距时,可以自动find配对的蓝牙设备。 背景 :在我们的案例中,Android应用程序需要通过蓝牙(Rfcomm)连接到专用附件。 两个设备彼此都知道(它们是配对的)。 Android应用程序注册广播接收器。 在应用程序启动期间,应用程序启动发现以查找专用附件。 如果配件在范围内,一切都很好。 问题 :用户在专用附件范围之外启动应用程序。 Android应用程序试图发现附件但没有成功。 然后用户进入蓝牙配件的范围。 现在广播接收器不会收到有关范围内配件的通知。 类似的线程/可能的解决方案在stackoverflow上已经提出了类似的问题(例如,在范围内时自动连接到蓝牙设备 )。 但不断尝试发现范围内的蓝牙设备并不是我想要的,因为这会导致Android设备的电池消耗过多。 另一种解决方案是尝试连接到Activity的onResume方法中的配对设备。 这可行,但缺点是应用程序无法在后台运行。 因此,用户必须至少将应用程序带到前台以启动连接。 我想到的第三个想法是在Android应用程序中实现服务器套接字。 当Android应用程序启动并且发现完成但没有成功时,Android应用程序可以创建服务器套接字并监听附件的传入通知。 这在某些情况下会有所帮助(例如,用户启动他的应用程序,接近附件,激活附件,并且附件在启动时通知应用程序它现在在范围内)。 但这仍然不是100%解决方案,因为两个设备都可以在彼此的范围之外启动。 此外,还必须实现其他function(Android设备中的蓝牙服务器插槽……)。 所以我想知道是否存在更好的解决方案。 我正在寻找一个解决方案,其中不需要额外的ServerSockets,我总是收到两个已经配对的设备在彼此范围内的通知:-) 谢谢你的帮助!

是否可以直接连接Android Wear设备和其他BLE设备,而无需与手机设备互动?

我正在寻找建议将两个BLE设备直接相互连接而不受电话设备的干扰。我知道在正常情况下,手表将连接移动设备的蓝牙,然后它将用于正常的数据传输过程。 在我的情况下,我希望这个东西直接在两个BLE之间。我有一个BLE设备是Android Watch(索尼,MOTO或任何Android Wear),另一个是BLE腰带或Strap。 现在在当前情况下,如果手表与手机配对,事情正常工作,Strap可以通过它传递数据,观看将接收这些数据。 但无论如何,我可以跳过移动设备配对部分,并将Android手表和表带直接相互连接。 您的智慧和想法非常受欢迎,感谢阅读!

Android 6.0 Marshmallow BLE连接问题

我遇到了Android 6.0和一些蓝牙低功耗设备的严重问题。 其中一个冲突的设备是这一个: DEVICE INFO: Name: Samsung Galaxy SV Model number: SM-G900V Android vers: 6.0.1 Patch level: May 1, 2016 Hard. vers: G900V.05 如果我根据连接和断开应用程序与BLE外围设备进行一些压力测试,则成功率几乎不会达到50%。 阅读Android的最新文档,他们建议在connectGatt方法的最后一个参数中指定传输模式,以强制执行BLE传输连接而不是BR / EDR: device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE); 这种改进没有任何改变。 根据一些建议以及有关BLE连接问题的阅读,我发现了三星Galaxy S6的几个相关问题, 其中一个建议他们提出了一系列修复BLE连接问题的步骤。 关键的一个是清除蓝牙共享系统应用数据。 这样做,连接率几乎立即增加了100%。 但是,如果您等待并使用其他一些BLE应用程序并连接到其他外围设备,问题迟早会回来。 Google Play中有一些应用尝试修复这些BLE问题,他们基本上做的是: /system/bin/rm -r /data/misc/bluetoothd/* /system/bin/rm -r /data/misc/hcid/* 虽然这是一种清除蓝牙缓存的方法,但它要求设备根植,这对专业应用来说不是一个合理的解决方案。 我研究的私有Android API都没有帮助我解决这个问题,我发现的唯一类似的是强制执行服务发现缓存清理 ,这与问题无关。 使用BLE数据包嗅探器,我发现ADV_CONNECT_REQ甚至没有从设备发送到外设,过了一段时间Android堆栈触发了BluetoothGattCallback的STATE_DISCONNECTED事件。 我不知道为什么在某些6.0设备中出现此问题而在其他设备中没有,因为蓝牙共享缓存似乎是问题所在。 什么是那里存储的? 刚刚连接/配对的设备? 我是唯一一个遇到这个问题的人吗? […]

通过免提配置文件在Android和另一部手机之间建立蓝牙连接

我正在尝试将我的Android手机用作免提工具包(如汽车用),以便连接到另一部手机(任何手机)并执行一些免提function,如(接听来电,拒绝等等)可以使用AT命令完成免提配置文件。 为此,我正在使用着名的蓝牙聊天应用程序,并且为了与任何设备建立连接而进行reflection: 方法m = device.getClass()。getMethod(“createRfcommSocket”,new Class [] {int.class}); tmp =(BluetoothSocket)m.invoke(device,1); 但是,为了实现免提function并理解我发送的AT命令,连接的手机需要通过使用UUID的免提配置文件:“0000111f-0000-1000-8000-00805F9B34FB” 因此,有没有办法实现与免提配置文件的连接? 谢谢!

通知栏上的蓝牙配对请求?

嘿大家! 在Android之前开始使用蓝牙编程。 但现在我遇到了一些问题。 我想知道为什么配对请求有时会显示在通知栏中,有时会跳过此对话框并直接显示对话框。 例如:我从嵌入式设备发起配对请求,然后会出现如下通知: 有时我不必费心去通知,我的对话框就像我预期的那样出现了。 有没有办法捕获该通知并显示对话框,或者当我启动蓝牙配对时,这是我的代码中的错误? 编辑: 更新1: 检查了Reno给我的答案,它实际上取决于各种各样的事情。 还有其他方法可以直接显示对话框。 当配对请求到达时,调用以下方法。 进行检查以查看对话框是应该显示在前台(true)还是显示为通知(false): public boolean shouldShowDialogInForeground(String deviceAddress) { // If Bluetooth Settings is visible if (mForegroundActivity != null) return true; long currentTimeMillis = System.currentTimeMillis(); SharedPreferences sharedPreferences = getSharedPreferences(); // If the device was in discoverABLE mode recently long lastDiscoverableEndTime = sharedPreferences.getLong( BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0); if ((lastDiscoverableEndTime […]

BTLE(蓝牙低功耗)开发套件 – 必须具有接近配置文件

任何人都可以指向一个经过试验和测试的蓝牙低功耗开发套件(板)吗? 我对邻近配置文件以及与智能手机(尤其是iPhone和Android设备 – 以及任何其他具有BTLE的设备)的兼容性特别感兴趣。 另外,你能告诉我哪些智能手机会支持邻近配置文件吗?

适用于iOS和Android的Unity3D:多人游戏(蓝牙连接)

我正在寻找一种方法来在Unity iOS和Android Basic中使用蓝牙连接两个设备以进行多人游戏。 我发现: 高通公司的AllJoyn – 蓝牙显然仅适用于Root -Android设备,目前还不适用于iOS。 由game31开发的iOS GameKit Local Multiplayer – 仅适用于iOS。 Gregzo的Bonjour插件 – 不是蓝牙,而是仅适用于iOS的其他本地多人游戏解决方案。 TNet :非蓝牙,仅适用于Android和iOS Pro 有没有任何其他解决方案(特别是Android)? 我将不胜感激任何帮助。 也适用于其他p2p-Unity-Solutions。

android蓝牙无法连接

我已经有一段时间没遇到这个问题而且无法解决这个问题。 我有一个Android应用程序,将所有配对的设备放在列表视图中。 当您单击其中一个列表项时,它将发起连接到该蓝牙设备的请求。 我可以得到他们的地址没有问题的设备列表。 问题是,一旦我尝试连接,我在socket.connect()上得到一个IOException; 错误消息如下: “连接读取失败,套接字可能关闭或超时,读取ret:-1” 这是我的代码。 任何建议将不胜感激。 我非常坚持这一点。 fyi:“onEvent”方法是一个简化回调的库……这个部分有效。 当用户单击列表项时,此方法称为“ public void onEvent(EventMessage.DeviceSelected event) ” public class EcoDashActivity extends BaseActivity { public static final UUID MY_UUID = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”); private BluetoothAdapter mBluetoothAdapter; private int REQUEST_ENABLE_BT = 100; private ArrayList mDevicesList; private BluetoothDeviceDialog mDialog; private ProgressDialog progressBar; private int progressBarStatus = 0; private Handler progressBarHandler […]