为什么BluetoothAdapter.startDiscovery(.)需要获取蓝牙设备广播?
通常是Android广播工作的方式:应用必须创建BroadcastreCeiver,并且必须注册行动意图,因为它想要获得接收事件. 但是,在蓝牙设备发现/扫描的情况下,为什么需要通过 bluetoothadapter.startdsiccovery(). 基本上,我想通过有人在这里有想法吗? 解决方案 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_DISCOVERABLE); startActivityForResult(di
10 2024-04-03
编程技术问答社区
如何在仪器设备内注册广播接收器?
我正在尝试通过Android Junit Runner运行的APK获得蓝牙发现结果.一切正常,但是当registerReciever时,我会以下错误.原因是什么? java.lang.securityException:给定的呼叫者包com.ex.test未在Process ProcessRecord {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.prin
配对过程后,蓝牙吹气器设备未粘合
我正在研究BLE,要求如下: 有一个从我本地数据库加载的设备列表. 在特定设备或行的点击点上,我必须检查该设备是否粘合了,如果是绑定的,则必须导航到特定的屏幕.如果不绑定,那么配对对话框将成功打开,我还可以输入配对该设备的密码. 但是,问题是在输入正确的密码后,我无法在我的广播接收器中获得BLE设备的粘合状态,如下所示: (注意:我们知道,如果BLE不键合,并且我们尝试连接,那么配对对话框将自动打开.) 请检查下面的代码: private fun initializeBluetoothBroadcastReceiver() { bluetoothBroadCastReceiver= object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Log.e("%%%%% ", "%%%%%
通过蓝牙耳机接听电话
我正在处理Voip-Android应用.我想在活动中接受和拒绝通过链接蓝牙耳机拒绝呼叫. 我到目前为止尝试过的是: 使用 问题:如果我们开始 使用Broadcastreceiver聆听蓝牙SCO连接更改. private val scoReceiver = object : BroadcastReceiver() { fun onReceive(context: Context, intent: Intent) { val state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1) val previousState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE, -1) if (state == AudioManager.SCO_AUDIO_STATE_D
当蓝牙连接状态改变时防止onDestroy
目标 如果已经连接的蓝牙设备断开连接,并且已经在运行活动,请关闭活动 问题 当蓝牙设备连接状态通过 BluetoothAdapterProperties变化:Connection_State_Change 时,似乎创建了一项新活动或当前一个重新启动. 代码中没有什么可以倾听和/或不应对蓝牙连接状态变化做出反应. 这个问题在使用广播剂的使用中表现出来,而广播剂又使用意图开始了活动.由于某种原因,活动不断通过其生命周期运行,即使蓝牙连接的唯一更改是 bluettoothadapterproperties:connection_state_change 我仅在与Android N的Nexus 6P上测试了此操作.我还不知道该实现对任何其他设备的含义是什么样的.但是我至少需要在一个设备上进行此操作. 更新 我已经做了相当多的实验,发现如果我不注册AndroidManifest的广播员,那么称为Ondestroy的问题就会消失.但是,我希望能够对蓝牙
12 2024-04-03
编程技术问答社区
蓝牙低能耗设备扫描失败,出现异常
我指的是开发人员文档扫描ble设备 - 连接/蓝牙-le.html 在我的活动类LookUpActivity中,我在按钮上打了一个方法findBLE() - //This will scan BLE devices public void findBLE() { Intent intent = new Intent(LookUpActivity.this, DeviceScanActivity.class); startActivity(intent); } ,但得到以下异常 - Could not find class 'com.testapp.main.DeviceScanActivity$1', referenced from method com.testapp.main.DeviceScanActivity. com.testapp.main fatal error : com.testapp.main.Device
4 2024-04-01
编程技术问答社区
在安卓系统上从TI BLE CC2540读取数值时失败,状态=10
我有一个带有CC2540芯片的设备,我尝试连接并读取/写入Android的数据. 发现设备,我可以连接,但是当我尝试发送读取命令时,我获得status = 10 at: public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) 我使用了" BLE传感器标签"源代码,并根据我的更改了UUID-我得到了相同的结果 我从Google Play使用了" BLE设备监视器"应用程序 - 我得到相同的结果(附加了屏幕截图) 我的问题是: "状态= 10"代表什么? 它来自哪里?芯片? Android? 如何调试? 我有一个iPhone设备,它运行良好... 解决方案 "状态= 10"代表什么? 实际上可以是任何事情,因为您无法访问BLE设备监视器的源.您可以找到通用的GAT
2 2024-04-01
编程技术问答社区
当应用在后台没有前台服务时,如何检测蓝牙的变化(连接状态和特征)?
我的设备是一个带有按钮的简单BLE设备,我需要检测用户何时长时间按设备(通过特征更改),即使应用程序在后台. 此单击将触发远程调用服务器. 我有两个问题: #1我可以在没有前景服务的情况下实现这一目标吗? #2如果我有一个带有ble gatt回调的前景服务,该如何再次检测设备何时再次处于范围? 我当前的解决方案是让前景服务始终在后台运行,但是这样,用户将需要始终显示对应用程序的通知. 解决方案 1: 是的,您可以通过使用 Jobintentservice 来实现这一目标而无需使用前景服务. 这种类型的服务不需要向用户显示通知. 要知道何时单击设备按钮,您的JobIntentservice可以扫描BLE设备,并且您可以在设备上发布的BLE数据中包含一个标志或最后点击的时间戳. 为了避免排出电池,我建议您不要连续扫描,而只会每分钟几秒钟. 2: 如果您的BLE扫描仪收到设备广告宣传的BLE数据,则表示设备在范围内.
2 2024-04-01
编程技术问答社区
startLeScan返回false
BluetoothAdapter的方法令人震惊的方法有时在扫描ble设备期间返回错误.因此,我在应用程序中面临问题.我正在使用Lollipop的较新方法Startscan(Scancallback Callback),但需要支持API级别18及以上.值得赞赏. 解决方案 如果您查看startLeScan 提供了无回调ha 客户已经使用同一回调 启动了扫描 该设备不支持蓝牙LE 发生内部RemoteException 内部呼叫android.bluetooth.IBluetoothGatt registerClient失败. 由于有时这起作用,因此问题可能不是1或3.您可以通过查看是否发生错误出现在logcat中的错误来查看是否是4. 上面的项目2是一个很好的候选人.您确定代码总是在正确停止扫描吗?您可能需要每次开始并停止扫描并确保连续看到两次开头. 如果问题不存在,则可能会留下可能性5,这表明ROM中蓝牙芯片或驱动程序的问题.如果是这种情况,您应该能够在
6 2024-04-01
编程技术问答社区
使用蓝牙智能连接时获得STATE_DISCONNECTED
我正在尝试在Android L上创建一个广告客户,而我的其他Android设备正在扫描该设备并尝试与之建立连接. 但是,每次我打电话connectGatt我都会在gatt回调中获得BluetoothProfile.STATE_DISCONNECTED. 这就是我创建广告的方式 // advertisement settings AdvertiseSettings.Builder builderSetting= new AdvertiseSettings.Builder(); builderSetting.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED); builderSetting.setConnectable(true); builderSetting.setTimeout(0); builderSetting.setTxPowerLevel(Advertis
4 2024-04-01
编程技术问答社区
安卓蓝牙LE API onScanResult扫描记录字节的含义
我正在开发一个应用程序,该应用程序在范围内扫描信标,并向用户显示信标的数据.我正在使用Android蓝牙LE API.在onScanResult()方法中,我得到ScanResult对象,然后将其解析为RAW字节.这是我从一个信标中获得的样本: 02:01:06:1A:FF:4C:00:02:15:74:27:8B:DA:B6:44:45:20:8F:0C:72:0E:AF:05:99:35:00:00:00:01:C5:02:0A:00:08:16:F0:FF:64:00:00:00:01:11:09:4D:69:6E:69:42:65:61:63:6F:6E:5F:33:36:38:35:30:00:00 我发现第一部分的含义没有问题 - 它与iBeacon格式相对应: 02:01:06:1A:FF:4C:00:02:15 - iBeacon prefix 74:27:8B:DA:B6:44:45:20:8F:0C:72:0E:AF:05:99:35 - UUID 0
8 2024-04-01
编程技术问答社区
有什么方法可以在Android 11中自动接受BLE配对请求?
我有一个Android应用程序,它连接到一些经典的蓝牙和BLE设备.从Android 10的安全补丁发布之一开始,我将在Android设备上收到配对请求.有没有办法在代码中自动接受这些请求? BLE设备没有PIN,只需要一定的读写操作才能配对.目前,我的写作操作失败了,除非我等待债券状态更改为在接受Android设备上的配对请求时发生的债券. 到目前为止,我尝试了似乎无法正常工作的SetPairingConfircation(true). 解决方案 我想配对的想法是,用户必须接受将"未知"设备配对与他的系统配对.否则,不同的阴暗应用程序可以在未经用户同意的情况下在后台配对设备. 不应首先需要配对,执行各种操作的外围,并不是要与用户配对.
如何使BLE Android应用程序在后台运行?
我正在研究Android应用程序.在此应用程序中,我必须连接到BLE设备.我希望当应用程序在后台时将应用程序连接到BLE设备. 解决方案 答案是至少拥有一项前景服务 https:https:https:https:https:https:https://developer.android.com/guide/components/services.html#foreground 在使用BLE的过程中.这将使Android保持您的流程.
尝试与BluetoothGatt连接时,回调中出现未处理的异常
我试图连接到外围.当我在scancallback中找到想要的设备时,我将带有设备的消息发送给处理程序. 11-16 10:31:12.471 25907-25907/I/BleManager: START SCAN 11-16 10:31:12.471 25907-25907/ D/BluetoothAdapter: startLeScan(): null 11-16 10:31:12.481 25907-25918/ D/BluetoothAdapter: onClientRegistered() - status=0 clientIf=5 11-16 10:31:12.731 25907-25918/ W/BleOlderScanCallback: Try to connect device 11-16 10:31:12.731 25907-25907/ I/BleManager: STOP SCAN 11-16 10:31:12.731 25907-25907/ D/
6 2024-04-01
编程技术问答社区
为BLE扫描回调加载类时出现NoClassDefFoundError
我一直在加载班级时继续获得NoClassDefFoundError. 该代码取自 bluetoothlegatt 项目 - 我的代码: // Device scan callback. private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { //java.lang.NoClassDefFoundError... @Override public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { runOnUiThread(new Runnable() { @Override public void run()
4 2024-04-01
编程技术问答社区
三星Galaxy S7上的connectGatt通过蓝牙经典而不是BLE创建连接
我有一个运行GATT服务器的双模式(BR/EDR + BLE)设备.该地址是公开的,对于BLE和BD/EDR. 当我使用Android 6.0.1(API级别23)上调用Galaxy S7上的ConnectGatt并将运输参数设置为" Transport_le",手机仍试图通过BD/EDR建立连接.看起来这个问题与BLE的公共地址有关,因为如果我将其设置为私人,则可以通过BLE完成连接. 仅在Galaxy S7上观察到此问题,在其他手机(即Nexus 6p)上始终通过BLE正确完成连接. 这是一个Android错误还是我错过了什么? 解决方案 蓝牙4.0规范指出,如果两个设备都支持经典和LEW,则必须在经典上进行连接.和Android堆栈倾向于遵循这一点.使您其他设备不可连接,并且在查询中不可见,它应该效果很好 其他解决方案 Gatt不是特定运输的,它是属性协议(ATT)的框架.如果外围设备是双模式设备,并且在BR/EDR上支持GATT,则可以通过BR/ED
30 2024-04-01
编程技术问答社区
如何从location_and_speed特征中提取经纬度?
在Android应用中扮演中心角色 - 您如何获得存储在 org.bluetooth.service.location.location.location_and_navigation_and_navigation ble firipheral? 我正在尝试以下Java代码 - private float mLatitude; private float mLongitude; private static final UUID LOCATION_AND_NAVIGATION = UUID.fromString("00001819-0000-1000-8000-00805f9b34fb"); private static final UUID LOCATION_AND_SPEED = UUID.fromString("00002a67-0000-1000-8000-00805f9b34fb"); private BluetoothAdapter mBl
14 2024-04-01
编程技术问答社区
无法从BLE设备上读取数据,但写入时可以正常工作(安卓)。
我正在尝试从BLE设备读取值.我遵循的步骤: 我能够发现BLE设备并连接到它. 我能够通过解析来找到所需的特征 服务并获得gatthacteristic. 我能够为BLE设备特征写一个值, 已验证. 我试图阅读该特征的属性 来自:读取,写和指示/通知的价值. 我正在使用的读写功能如下: a)读取功能: public void readCharacteristic(BluetoothGattCharacteristic characteristic) { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, "BluetoothAdapter not initialized"); return; } boolean status; Log.w(TAG, "SCBABLe: Writing BLuetooth");
10 2024-04-01
编程技术问答社区
Android-我可以使用什么API来查看设备是否支持BLE中央模式?
/Connectivity/Bluetooth-Le#角色 中央与外围.这适用于BLE连接本身.这 中心角色扫描,寻找广告的设备,以及 外围角色中的设备使广告. 检查设备是否支持"外围"/广告模式,好像我可以使用getBlueToothleadvertiser() getBluetoothleadvertiser 在API级别21公共中添加 bluetoothleadvertiser getBluetOthLeadvertiser()返回 用于蓝牙LE广告操作的蓝牙光线视图对象. 如果关闭蓝牙或蓝牙LE,将返回null 该设备不支持广告. 使用ismultiplipleadvertisementsupported()检查是否le le neverting 在调用此方法之前在此设备上支持. 现在,我听到一些谣言说,有些设备实际上可以给您一个蓝牙光线视图器,但是在isMultipleAdvertisementSupported()上返回false这本
18 2024-04-01
编程技术问答社区
BluetoothLeAdvertiser AdvertiseCallback抛出的是Advertiser_FAILED_TOO_MANY_ADVERTISERS的广告。
我有此代码来创建广告: private void startLeAdvertise() { AdvertiseSettings settings = new AdvertiseSettings.Builder() .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY) .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH) .setConnectable(true) .setTimeout(ADVERTISE_TIMEOUT) .build(); AdvertiseData data = new AdvertiseData.Builder()
42 2024-04-01
编程技术问答社区