Articles of android bluetooth

未生成蓝牙HCI监听日志

我正在运行Android 4.4.2并启用了“Bluetooth HCI snoop log”,如此处所述嗅探/记录您自己的Android蓝牙流量 打开和关闭蓝牙后,我重新启动了手机。 我在预期的位置找不到日志文件: $ adb pull /sdcard/btsnoop_hci.log remote object ‘/sdcard/btsnoop_hci.log’ does not exist 我怎样才能到达btsnoop_hci.log?

如何使用蓝牙热敏打印机打印发票收据

我必须使用热敏打印机打印发票收据。 我用Zjiang Thermal打印机打印收据。 他们还提供手动和演示项目。 在演示项目中,他们使用libray“btsdk.jar”来实现连接和打印。 我已成功建立打印机和Android设备之间的连接。 但是没有文本对齐(中心,左,右)和单元格宽度,高度的指导。 我试过了 。 它只通过更改格式2variables来更改文本高度。 我如何通过蓝牙打印机打印发票。 还请解释这一节 – byte[] cmd = new byte[3]; cmd[0] = 0x1b; cmd[1] = 0x21; cmd[2] |= 0x10; cmd 2 – 用于更改字体高度cmd [0]&cmd 1的用法 代码将打印消息发送到蓝牙打印机在演示项目中 String msg = “”; byte[] cmd = new byte[3]; cmd[0] = 0x1b; cmd[1] = 0x21; cmd[2] |= 0x10; mService.write(cmd); mService.sendMessage(“Congratulations!\n”, “GBK”); […]

Android – 获取此设备的蓝牙UUID

我正在浏览Stack和互联网上的一个简单的解决方案来获取我正在使用的设备的UUID 。 我偶然发现了这样的post,但他们似乎都没有帮助我。 doc讲述了这个 getUuids()函数,但是在浏览Android蓝牙的文档时,我最终得到了一个BluetoothAdapter,但是我需要一个BluetoothDevice来执行这个function。 所以我需要知道以下内容: 1)函数是否真的返回设备UUID ? 因为名字说复数(getUuid s ) 2)如何获得此BluetoothDevice的实例? 谢谢!

适用于Android,iOS和Win8的蓝牙低功耗连接参数

我一直在寻找所有这三个操作平台所需的蓝牙连接参数。 我正在使用此项目的HOGP(Bluetooth over HID GATT)配置文件。 我的项目是一个由我自己编写的嵌入式系统,带有一个BLE模块,我可以控制以下连接参数。 连接间隔最小值 连接间隔最大值 奴隶潜伏期 监督超时 广告时间间隔 广告间隔最大 我要连接的目标设备将满足Android> = 4.3,iOS7和> = Win 8.1的连接。 Apple非常友好地在下面的链接中提供了第22页上带有相应参数的文档。 我无法find有关Android和Win 8的任何信息。 https://developer.apple.com/hardwaredrivers/bluetoothdesignguidelines.pdf 我目前的iOS7工作设置完全测试与免费软件lightBlue的双向通信如下。 我的iOS7嵌入式代码和主机软件可以运行。 连接间隔最小30ms 连接间隔最大56.25ms 奴隶潜伏期3 监督超时5000ms 我从另一个堆栈溢出页面发现,据称android可以通过以下链接在7.5ms连接间隔上工作。 Android BLE连接时间间隔 http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag?DCMP=lprf-stdroid&HQS=lprf-stdroid-pr-wiki1#Supported_Android_devices 不幸的是苹果iOS规范的第二个要求是“IntervalMin≥20ms”。 我不理解这些范围或如何解释它们? 如果我将Interval min设置为7.5ms for Android,那会不会影响苹果的要求? 如果可能,我如何满足两个系统和Win8? 我的理解是从设备在最小值和最大值之间提供建议设置,并且主设备(智能手机)警告用户该范围内的实际选定值。 我对这个问题的任何帮助表示感谢,并希望这篇文章能够让其他人考虑到BLE相当新的和不完整的知识基础。 提前致谢!

使用Android 6.0的BluetoothLeScanner.startScan无法发现设备

我正在尝试使用BluatoothLeScanner.startScan函数而不是弃用的BluetoothAdapter.startLeScan 。 昨天我将我的Nexus 5更新为Android 6.0,从那时起我的应用程序就不再起作用了。 我首先添加了此处所需的ACCESS_COARSE_LOCATION首选项, https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id 。 然后我添加了如下所述的权限: https : //developer.android.com/training/permissions/requesting.html 。 但最后它似乎无法正常工作,它不会发送回设备。 这是我的代码: 表现 ` DeviceScanActivity @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); … if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) { } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_COARSE); } } // Device scan callback. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) == […]

检查Android互联网连接的完美function,包括蓝牙平台

我的应用程序在wifi和移动网络中运行良好,但无法检测何时通过蓝牙网络共享连接。 public boolean isNetworkAvailable() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { return true; } return false; } 我试过运行一些其他应用程序。 他们也没有显示网络连接,但谷歌应用程序工作完美,所以像其他一些应用程序,如whatsap。 想知道他们是如何做到的,以及为什么大多数应用程序都忽略了这一点。 谁能告诉我一种方法来检查Android中的互联网连接,通过一切可用的方式,包括蓝牙泛和代理等。 任何帮助将不胜感激。 提前致谢..

在Android上同时与多个BLE设备进行稳健通信

虽然使用Android BLE apis的无证,传统智慧是某些操作,如读/写特征和描述符应该一次一个(尽管有些设备比其他设备更宽松)。 但是,我不清楚此策略是仅应用于单个连接还是应用于所有活动连接。 我听说最好一次启动一个设备连接。 这可能是应该在所有设备之间串行执行的操作(connect / connectGatt)的示例。 但对于其他操作,如读写特性,如果每个连接串行执行操作,或者我是否需要在所有设备之间共享一些全局操作队列,以便在所有设备之间只执行一个操作,它是否足够好?

如何从Android蓝牙耳机捕获关键事件

我的应用程序可以通过普通耳机控制。 它只是覆盖“onKeyDown”。 但是没有捕获蓝牙耳机的关键事件 – 为什么? 或者如何捕获蓝牙键事件? 如果我按下耳机上的按钮,“log cat”会显示以下内容: Bluetooth AT recv(3043): AT+VGS=15 AudioPolicyManagerBase(13654): FM radio recording off AudioService(2261): sendVolumeUpdate, isKeyguardLocked…Not to update Volume Panel. VolumePanel(2261): change volume by MSG_VOLUME_CHANGED VolumePanel(2261): onVolumeChanged(streamType: 6, flags: 0) VolumePanel(2261): Call setChangeSeekbarColor(false) 我也尝试处理媒体按钮操作,但这不起作用。 我的想法是一个免费的可配置键映射:用户选择“设置键”我的应用程序听到所有键(硬件,媒体按钮,蓝牙耳机),然后用户按下一个键,事件/密钥代码存储在配置中。 总结不工作的答案:音量按钮必须由“VOLUME_CHANGED_ACTION”捕获。 问题是这个意图被广播到其他应用程序并且abortBroadcast()不起作用(它仅适用于“有序”广播)。 另一个问题是有线耳机和手机上的按键触发onReceive()两次(为什么?)蓝牙耳机会触发一次。 下一个问题是蓝牙耳机上的第3个键。 它触发语音命令(s-s在s3上启动),我试图捕获许多关于此的不同意图,但我无法“接收”此按钮按下而不知道为什么。 最后,我希望捕获各种按钮,并且不希望它们由其他应用程序处理(例如使用onKeyDown并返回true)。

如何通过蓝牙低功耗(BLE)链路发送数据?

我能够发现,连接到蓝牙。 源代码 – – 通过蓝牙连接到远程设备: //Get the device by its serial number bdDevice = mBluetoothAdapter.getRemoteDevice(blackBox); //for ble connection bdDevice.connectGatt(getApplicationContext(), true, mGattCallback); Gatt CallBack for Status: private BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { //Connection established if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED) { //Discover services […]

BLE Android – 未调用onConnectionStateChange

我在尝试连接外围设备时遇到问题。 有时在BluetoothDevice#connectGatt(…)之后不会调用回调onConnectionStateChange(…) BluetoothDevice#connectGatt(…) 。 我想要实现的是用户操作触发的快速和短连接。 这种情况大约发生在10次中,没有特定的事先行动。 它持续约20至30秒,或直到应用程序被杀死并重新打开。 我遵循的正常步骤顺序是: 扫描设备以查找外围设备。 调用BluetoothDevice#connectGatt(…) 。 如果连接时间超过1秒,则意味着连接“卡住”,因此无法连接,因此再次调用BluetoothDevice#connectGatt(…) 。 这样做的次数限制为5次。 使用newState CONNECTED调用onConnectionStateChange(…)并开始服务发现。 其余的操作没有问题。 断开连接后,会调用BluetoothGatt#close() 。 发生的问题是在第3点。有时onConnectionStateChange(…)没有被调用。 我注意到大多数时候问题都是从特定的行为开始的。 在BluetoothDevice#connectGatt(…) ,使用newState CONNECTED调用onConnectionStateChange(…) ,但在newStatus DISCONNECTED之后几乎立即(~40毫秒)再次调用。 由于状态改变的时间很短,我可以推断设备甚至没有尝试建立连接并将状态更改为DISCONNECTED。 问题在以下时间结束: 20-30秒过去了。 在此期间,永远不会调用onConnectionStateChange(…) 。 问题结束时, onConnectionStateChange(…)被称为应用程序尝试连接的次数。 例如,如果BluetoothDevice#connectGatt(…)被调用15次,则onConnectionStateChange(…)被调用15次,其中newState等于DISCONNECTED。 这很奇怪,因为在任何连接尝试中都没有将状态更改为CONNECTED。 应用程序被杀死并重新启动。 SDK18和SDK 21中发生此错误。 @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { String deviceName = device.getName(); if (deviceName […]