Articles of bluetooth

Android – 无法连接到Lollipop上的蓝牙设备

我有一个在Android 4.3和4.4上运行良好的应用程序。 该应用程序将连接并与自定义蓝牙设备通信。 在我将Nexus 5突然闪现到Lollipop后,我根本无法连接到设备。 连接结果总是133.这是日志: D/BluetoothGatt﹕ connect() – device: 00:07:80:04:1A:5A, auto: true D/BluetoothGatt﹕ registerApp() D/BluetoothGatt﹕ registerApp() – UUID=xxxxxx-xxxx-xxxxx-xxxx-xxxxxxxx D/BluetoothGatt﹕ onClientRegistered() – status=0 clientIf=6 D/BluetoothGatt﹕ onClientConnectionState() – status=133 clientIf=6 device=00:07:80:04:1A:5A 我的代码: public boolean connect(final String address) { if (mBluetoothAdapter == null || address == null) { return false; } Handler handler = new Handler(Looper.getMainLooper()); // […]

通过蓝牙耳机VoIP接听电话

我正在开发一个VoIP-Android-App和该应用程序需要能够接受/拒绝通话蓝牙耳机。 但问题是在添加连接到SCO之后 audioManager.startBluetoothSco() audioManager.isBluetoothScoOn = true 一旦我点击耳机按钮,我可以听到通常在我接受使用电话呼叫时发出的声音,所以我假设一些android系统组件捕获此信号并且不会进一步抛出它 我已经尝试过了: 1)电话状态监听器(它始终是IDLE) val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager phoneStateListener = MyPhoneStateListener() tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE) 2)MediaSession +静音噪音+媒体按钮监听器第一次点击不起作用,第二次+点击正确处理 3)MEDIA_BUTTON接收器不起作用 我在SO上发现了一个类似的问题,但没有答案如何使其工作通过蓝牙耳机接受呼叫 那么我是如何拦截蓝牙耳机服务的蓝牙按钮点击的呢?

Android 2.1:如何轮询现有蓝牙连接的RSSI值?

我需要知道我使用Android 2.1手机连接到远程设备的蓝牙连接的信号强度。 从SDK中,我可以看到我可以在发现远程设备时确定RSSI。 但我无法看到如何随着时间的推移更新RSSI值。 有人可以帮我一把吗? 谢谢!!

Android模拟器上的蓝牙低功耗

我研究了蓝牙低功耗 。 但我没有支持BLE设备进行测试。 因此,我想问: Android模拟器是否支持BLEfunction进行测试? 我在Android Emulator 4.3(x86)和Android Emulator 4.4(ARM)上尝试使用以下代码: // Use this check to determine whether BLE is supported on the device. Then // you can selectively disable BLE-related features. if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show(); finish(); } 它总是显示“ble_not_supported” 。 另一个问题是 另一个模拟器或工具支持Android的BLE? 我真的想在模拟器上测试BLEfunction。

如何从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)。

Android Lollipop 5.0蓝牙低功耗核心角色的糟糕表现

自从Android 5.0 Lollipop最近发布以来,我在Nexus 4设备中遇到了蓝牙低功耗API的非常糟糕的性能。 使用之前的操作系统版本(Android 4.4.4 Kit-Kat),它就像一个魅力,在5.0上运行的相同应用程序具有以下行为: 通常它不会检测来自外围设备的任何广告包。 外围设备的ADVERTISING_INTERVAL是20ms,因此应用程序应该在最坏的情况下在60ms内检测到至少一个广告。 我尝试使用BluetoothLeScanner (使用SCAN_MODE_LOW_LATENCY设置)不使用已弃用的mBluetoothAdapter.startLeScan(mLeScanCallback)没有成功。 当它发生时,当我尝试连接到GATT服务器时,很少这样做。 我已经使用BLE嗅探器检查了CONNECTION_REQUEST数据包是否甚至没有发送到外设。 看来我不是唯一一个有这种错误的人,而其他一些用户也发布了类似的问题 。 有人知道发生了什么吗? – 更新1: (2014/12/17) 我还使用运行Lollipop的Nexus 5测试了相同的应用程序,它很少连接到GATT服务器。 每次发送连接请求时,它都不会发生,因为外围设备没有收到数据包。 在将此Nexus 5升级到Lollipop之前,它在Kit-Kat 4.4.4上完美运行。 更新2: (2014/12/17) Android 5.0.1根本无法解决问题。 更新3: (2015/04/23) Android 5.1也没有解决问题。 今天我有机会在SAMSUNG Galaxy S4上测试Android 5.0.1,它运行得很好。 我还在Nexus 5上测试了一个全新的Android 5.1安装,它也可以正常工作。 问题仍然存在于Nexus 4.他们在Android 5.0和后续版本的固件上做了一些奇怪的事情,破坏了Android 4.4.4与蓝牙API的完美兼容性。

订阅BLE Gatt通知Android

我正在开发一个BLE应用程序,基于谷歌提供的Gatt示例项目: https : //developer.android.com/samples/BluetoothLeGatt/index.html 。 因此,我可以成功地发送数据写入特征。 现在我需要知道这个特征何时会改变它的价值。 我知道我需要实现setCharacteristicNotification()方法和onDescriptorWrite()方法。 但我无法做到这一点。 正在搜索,我发现了一些想法: Android BLE API:未收到GATT 通知,蓝牙低功耗(BLE)设备通知的步骤是什么? ,但仍然没有运气我不明白它是如何工作的,我需要定义什么参数或我需要做什么!!! 一些好的灵魂可以分享我这样做的完整项目。 我需要的只是在BLE设备返回某些数据时可视化特征的值。 我阅读了官方的Android文档,但它并没有那么具体。 提前致谢 这些是我的代码: 设备 public class DeviceControlActivity extends Activity { public static final String EXTRAS_DEVICE_NAME = “DEVICE_NAME”; public static final String EXTRAS_DEVICE_ADDRESS = “DEVICE_ADDRESS”; private TextView mConnectionState; private TextView mDataField; private TextView mRssiField; private String mDeviceName; private String […]

通过蓝牙打印机Android打印Pdf文件

在我的项目中需要通过蓝牙打印机打印Pdf文件。 我写了一个代码,通过pdf打印它适用于文本, 但我想在蓝牙打印机上打印PDF文件。 我的java代码打印文本 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv= (ListView) findViewById(R.id.listView1); // listdata(lv); try { // we are goin to have three buttons for specific functions Button openButton = (Button) findViewById(R.id.open); Button sendButton = (Button) findViewById(R.id.send); Button closeButton = (Button) findViewById(R.id.close); Button btnco= (Button) findViewById(R.id.btnconnect); btnco.setOnClickListener(new OnClickListener() { @Override public void […]

如何在BLE中解决onClientConnectionState() – status = 22 clientIf = 7的错误

我有一个Android应用程序,用于连接蓝牙低功耗 (BLE)和我的手机。 该应用程序在几乎手机中运行良好,如Galaxy S5(Android 5.0.1),Galaxy S6(Android 6.0)。 但是,它在Galaxy Note 3(Android 5.0.1)中存在一个关键问题。 当我调用connect()函数,然后调用readCharacteristic() ,它返回错误: onClientConnectionState() – status = 22 clientIf = 7 我调用connect函数大约2秒后发生错误。 我查找了一些解决方案,比如在调用readCharacteristic()之前做出延迟,但它无法解决。 你能解决我的问题吗? 谢谢大家。 这是我的代码: private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { if (newState == BluetoothProfile.STATE_CONNECTED) { mBluetoothGatt.discoverServices(); } else if (newState == […]

如何在Android中创建不安全的RFCOMM套接字?

我正在寻找不安全地连接rfcomm socket的方法。 我能够find下面提到的方式 Method m = device.getClass().getMethod(“createInsecureRfcommSocket”, new Class[] {int.class}); tmp = (BluetoothSocket) m.invoke(device, 1); 这暂时是做我想要的。 即使是这里的文档也说我们需要使用createInsecureRfcommSocketToServiceRecord来进行不安全的连接。 但是没有这样的方法。 我发现的唯一方法是使用如上所示的reflection。 甚至在createInsecureRfcommSocket中传递的方法,而不是createInsecureRfcommSocketToServiceRecord。 我只是想知道这种方式有多可靠。 如果我在方法中提到createInsecureRfcommSocketToServiceRecord,则连接永远不会发生。