我将我的应用程序版本发布到了Google Play上,并于今天早上与许多不满意的客户醒来.该应用的最新版本集成了对蓝牙低能(BTLE)心率监视器的支持. 该应用在Android 4.3和4.4上运行良好,但在4.0、4.1和4.2上崩溃,并带有以下错误. FATAL EXCEPTION: main java.lang.NoClassDefFoundError: com.eiref.boatcoach.MainActivity at com.eiref.boatcoach.WhatToDo.onClick(WhatToDo.java:274) at android.view.View.performClick(View.java:4204) at android.view.View$PerformClick.run(View.java:17355) at android.os.Handler.handleCallback(Handler.java
以下是关于 android-bluetooth 的编程技术问答
如何在不使用任何应用程序的情况下将视频从Android智能手机传输到笔记本电脑(Windows 7)?有什么建议么?简短的解释确实会有所帮助.而且,我的意思是"流"而不是文件传输. 解决方案 如果不使用任何应用程序,您将无法使用此功能,您需要做的是编程将视频发送到通过WiFi连接的服务器的套接字客户端. > 其他解决方案 转到以下链接. https://code.google.com/p/spydroid-ipcamera/ 您将获得WiFi流媒体的完整源代码,您可以在笔记本电脑的浏览器以及VLC Media Player(RTSP)上看到这些代码.而且,您也可以使用VLC插件在另一台移动/平板电脑中看到
我们目前正在使用蓝牙LE,并希望将128个字符串发送到Gatt服务. 现在,蓝牙规格说BLE的最大数据包大小为22个字节,我的字符串永远不会适合数据包. 我们正在考虑将其整理并在迭代中发送. 这是通常做事的方法吗? 解决方案 是的,您需要将数据汇成18个字节,然后向服务器发送一系列Prepare Write Request.此请求中的每一个都有3个参数: 属性句柄(2个字节) 属性偏移(2个字节) 数据部分(最大18个字节) 因此,您首先要发送一个带有偏移0的数据包,然后发送一个带有偏移18的数据包,然后是36等. 当您这样做时,服务器排队所有请求. 最后,您发送Execute Write Request,服务器一枪写下所有字节.
我目前正在设计一个简单的室内位置项目,以评估蓝牙5.1标准的可能性.我想使用的功能是蓝牙5.1中引入的AOA(到达角度). 根据标准,AOA允许通过在定位器/接收器(RX)上近似角度并测量RSSI来测量传输设备(TX)的位置.由于AOA是在5.1中新实施的功能,因此我知道RX需要支持5.1蓝牙标准.传输设备怎么样?它需要支持的最低版本是什么?我可以为此目的使用4.x BLE信标(或模拟信标的Android/iOS设备)? 解决方案 实施方式使用了包含"恒定音调扩展"的广告数据的扩展版本.两种设备都需要支持此功能以计算角度.因此,不,您不能使用旧的4.x设备.两种设备都必须明确支持此功能,并使用它.请记住,远离所有蓝牙5.1和5.2设备支持此功能. 其他解决方案 如果您想体验ble aoa,而不是ble 5.1方向查找,则可以在BLE 4.2+设备上创建特殊的BLE框架.它可以模仿CTE框架,但是接收器端也需要能够处理此框架.它不是5.1方向找到标准的一部分.
当iOS BLE进入背景状态时,广告数据包不会定期发射,并且将它们放置在特殊的"溢出"区域中,只有另一个iOS设备才能明确查找此设备. The bluetooth-peripheral Background执行模式 也就是说,您应该意识到,当您的应用程序在后台运行时的广告与您的应用程序在前景时的运行方式不同.特别是,当您的应用在后台进行广告时: •cbadvertisementdatalocalnamekey广告键被忽略,并且未宣传外围的本地名称. •cbadvertisementdataserviceuuidskey广告键都包含在特殊的"溢出"区域中;它们只能通过明确扫描它们的iOS设备才能发现. 有什么方法可以在无需连接到iOS外围的情况下检测任何广告的自定义UUID? 解决方案 带有"溢出"区域,我想它们的意思是扫描响应数据.为了获取该数据,设备必须执行主动扫描,而不是被动扫描.在主动扫描中,扫描仪在检测到广告数据包后立即发送扫描请求包.广告设
我有一个功能充当中央的Android客户端,并且在我的Mac(外围)上有一个应用程序,该中心将其连接到并发送数据. 在这一点上,我需要等待将近100毫秒,然后打电话给Writecharacteristic(..)接收onCharacteristicWrite(..)回调.我正在发送字符串.如果我发送较小的字符串,则吞吐量很棒(可以理解).当字符串包含大约200个字符,我发送20个字节块时,几乎需要一秒钟才能在周围看到整个字符串.当我在编写特征之前将"写入类型"设置为no_response时,我没有看到有关外围的数据. 连接后,我做了以下操作以改进吞吐量: 发现服务后停止发现,因为这是一个昂贵的操作 我将写类型设置为默认值 - 当我这样做时,我会在外围看到数据.但是,有很大的延迟.当我将WriteType设置为no_response时,我在周围没有看到数据.我在characteristicwrite上也没有逻辑(..).有时,我看到数据被截断在外围. 我将所需的连接延
我有两款Android智能手机(Xperia Z和Xperia Z1),并且都具有BLE功能. 我可以作为BLE的外围设备连接到其中一个吗?在我的应用程序中,我可以看到并将BLE作为外围设备(CC2541设备)连接,并且可以看到所有服务和特征. 但是相同的应用程序看不到我的手机之一? 有没有办法实现这一目标? 解决方案 与Android 4.4一样,Android BLE API中的外围MOD不支持.您将需要这样做,以便通过将一部手机设置为外围,而将其设置为中央. . 有一个功能请求对于您可能可以使用的功能想注意. 如果您只想能够获得两部连接的手机,那么没有什么可以阻止您使用经典的蓝牙,这应该是完全可行的. 其他解决方案 Android直到版本5.0(最新版本)不支持外围模式,因此您无法通过BLE与两个智能手机通信. 您可以通过传感器设备和智能手机在此处通过BLE通信智能手机应用程序作为服务器作为客户端和传感器设备. ,如果您想在两台
我有一个使用CoreBluetooth的工作应用程序在iPad(Central)和iPhone(外围)之间进行通信.我有一个具有两个特征的服务.我有一个Nexus 7,运行最新的Android 4.3,并带有BTLE支持. Android跳到Btle Bandwagon有点晚了,但看来他们正在与iOS的处理方式类似,最初它们仅支持在后面版本中充当外围模式的中心.我可以加载样品Android Btle应用程序,然后浏览附近的外围设备.以我的iPhone广告作为外围广告,我可以在Android方面的附近外围设备列表中看到CbadvertisementDatalocalnamekey的价值.我可以连接到iPhone,当连接建立连接时,蓝牙符号从浅灰色变为黑色.连接始终持续10秒,然后断开连接.在Android方面,我应该看到可用服务的列表,并在连接后立即出现特征.我已经证明了Android代码的设置正确,因为我可以将其固定到我拥有的TI CC2541DK传感器硬件中,并且在连接到它时列出了所有
嗨,我需要将3个不同的设备(客户端)连接到第四个设备(服务器). 这是我的服务器代码: public class MainServerActivity extends Activity { ArrayAdapter listAdapter; ListView listView; TextView textViewTextoRecibido; BluetoothAdapter btADapter; Set devicesArray; ArrayList pairedDevices; ArrayList devices; IntentFilter filter; BroadcastReceiver receiver; public AcceptThread acceptThread; protect
对不起,我的毛孔英语. 我做一个无线电播放器.我可以获取库伦名称和标题,因此每15秒钟我阅读新信息,并在主要活动和通知中显示它们.当我将手机连接到汽车时,FIRDT艺术家展示得很好.当第二次出现时,我的手机上的名称是正确的,但在汽车屏幕上没有更新.每次连接都停止并重新启动,名称是正确的,但在下一首歌曲时从未更新. 我的班级实现了听画者. 我使用此代码更新元数据: MediaSession是一种MediaSessionCompat mediaSession.setMetadata(new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, strArtist) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, strAlbum) .putString(MediaMeta
我正在使用蓝牙进行插座通信,其中我将十六进制值作为字符串格式的变量. 我可以写下 - char char1= 0x7D; 但是,如果值为0x7D是字符串,则如何将其转换为char. 例如,我做不到 - String string1 = "0x7D"; char char1 = (char)string1; 有任何方法吗? 我想要这个,因为我可以用 - 写入插座 char[] uploadCommand2 = {0x7d, 0x4d, 0x01, 0x00, 0x01, 0xcb}; ,但是如果0x7d是 - 的字符串,则不能 char[] uploadCommand2 = {string1, 0x4d, 0x01, 0x00, 0x01, 0xcb}; 解决方案 如果您脱离了0x String表示的前缀,则可以使用Integer.parseInt并将其铸造为char. 请参阅下面的编辑有关替代方案(可能更优雅的解决方案).
我尝试通过蓝牙低能Gatt模式将Android连接到Linux. bluez中有一个示例代码: Android方面是运行后,Android零件返回了连接成功,(bluetoothgattcallback的参数:: onConnectionStateChange be state_connected),但是Linux(BTGATT-SERVER)中的程序没有得到任何响应,但仍阻止等待接受. (第485行). 我还使用了另一个示例代码:有人可以帮助我吗?我的目标是:连接后,Linux Gatt服务器将将数据发送到Android.然后断开连接. 谢谢你. 解决方案 我现在遇到了同样的问题. 这似乎是Android和Broadcom蓝牙模块发生的错误. Android以某种方式连接到错误的L2CAP通道. 解决方法是明确禁用BR/EDR 广告中的支持. 可以找到Google上使用#8中的解决方案的错误报告在这里,提示帮助我的报价: 我从Broad
在我的Android应用中,我使用Android NDK来播放音乐: 使用处理音频样本 使用 opoe库 ,将处理的样品重定向到音频输出. 为了避免撤离,我在单独的线程中执行前两个步骤,以提取和处理声音提前一点(它增加了一些延迟,但这对我的应用来说不是问题).该解决方案在我迄今为止测试的每个设备上都很好. 但是出于某种原因,当我将设备与蓝牙扬声器配对时,当我播放音乐时,我的设备似乎在某些设备上似乎是远不足的,例如三星S7或诺基亚1(但在每个设备上都没有). 这个错误对我来说是如此随机,以至于我不知道从哪里开始.它的作用就像蓝牙连接使用了很多CPU,因此我的应用程序没有足够的资源来正确运行. 有人经历过类似的事情吗?我应该在代码中执行任何操作以处理蓝牙连接,以免使用CPU(例如,避免音频重新采样)? 感谢您的帮助. 解决方案 Android +蓝牙音频是一个痛苦的世界.蓝牙要欣赏的主要内容是音频接收器以独立于其他音频设备的速率运行,这就是为什
在我的addroid应用程序上,我尝试在尝试启动广告时尝试添加一些额外的数据,并且当我阅读时,广告数据必须为 这就是我的方式: var testData = "abcdefghij" var data = AdvertiseData.Builder().apply { addServiceData( ParcelUuid(MY_UUID), testData.toByteArray(Charsets.UTF_8) ) } bleAdvertiser.startAdvertising( settings.build(), data.build(), advertiseCallback ) 这样,一切都很好.现在,如果testData字段变为 var testData = "abcdefghij
我在应用程序中正在研究蓝牙.我找到了该文章可以从 doc .我为血压监测器发现的两个ID分别用于血压和血压测量.我完全是新手的,所以我不正确地理解.我发现这个堆栈溢出1 和堆栈溢出2 .因此,我在 btyearrayof 中增加了价值,但这给我带来了错误.还请指导我如何传递数据以使用多个ID 扫描过滤器 private fun scanFilters() { val scanFilterList = mutableListOf() val serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF" val setServiceData = byteArrayOf( 0x1810, 0x2A35 ) val scanFilter = ScanFilter.Builder().setService
通常如何Android广播工作是:应用程序必须创建BroadcastReceiver,并且必须注册Action Intent for It想要获得的事件. 但在蓝牙设备的情况下发现/扫描它需要它需要请求调用 bluetoothapere.startdsiccovery(). 基本上我想要通过 long live 在背景中运行的服务. 任何人在这里有想法吗? 解决方案 private void listenPairedDevice() { Button listenBtn = (Button)findViewById(R.id.button_listen); listenBtn.setOnClickListener(new OnClickListener() { public void onClick(View view) { Intent disc = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOV
我正在尝试通过作为androidjujit runner运行的apk获取蓝牙发现结果.一切都适用,但是,虽然注册更新,但我得到以下错误.可能是什么原因? java.lang.securityException:给定的来电包com.ex.test在进程过程中未运行{d740580 19462:com.ex/u0a302} 代码 - @Test public void demo() throws Exception { Context ctx = InstrumentationRegistry.getInstrumentation().getContext(); BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBtAdapter.isDiscovering()) { System.out.println("Stop ongoing d
我正在使用VoIP-android应用程序.我想通过一个Connected 蓝牙耳机接受和拒绝呼叫. 到目前为止我尝试了什么: 使用a 问题:如果我们开始 Bluetoothsco 我们没有收到任何媒体按钮点击.如果我们没有启动蓝牙科目我们会接收媒体按钮,但我们无法区分long and short按钮,因为停机时间始终为0,键码始终是keycode_media_play,并且action_down紧跟action_up.只有在我们通过蓝牙连接时才出现这些问题.如果我们通过电缆耳机连接,我们确实得到了相应的keycodes(keycode_headseThook),停机时间不是0. 使用Broadcasteceiver侦听蓝牙SCO连接更改. private val scoReceiver = object : BroadcastReceiver() { fun onReceive(context: Context, intent: Intent) {