Articles of 蓝牙

Android BLE Beacon扫描

蓝牙LE是在Android 4.3中添加的,但似乎没有后台扫描模式,一旦注册通过附近的可用BLE UUID进行通知,它就会唤醒应用程序。 这似乎可以通过iOS7和iBeacons API实现。 有没有人知道Android 4.3中是否有这样的function,或者是否有针对BLE设备的周期性扫描BLE环境的良好解决方法? http://developer.android.com/guide/topics/connectivity/bluetooth-le.html Estimote Details iOS 7 iBeacon Support For Its Contextual Proximity Shopping Devices

连接到String上具有蓝牙地址的设备

我正在做一个Android应用程序,我将另一个设备的MAC作为一个字符串(长度为17个字符),并且需要使用那个以连接到该设备(启动蓝牙连接的线程)。 我整个下午一直在玩它,无法弄清楚如何做到这一点。 问题是它不允许我将BluetoothDevice设置为等于字符串。 有没有办法可以/必须这样做? (决定不把我的任何尝试作为代码,看看它们是如何充满错​​误的) 它必须与运行完全相同的应用程序的另一台平板电脑通信。 我之前浏览了这个页面,我的大部分应用都基于此。 我的主要问题是使用ConnectThread示例时, 我有一个MAC地址字符串,如何连接到该MAC? 任何帮助将受到高度赞赏,

startLeScan替换为当前的api

目标是读取蓝牙LE心率监测器的值。 使用谷歌的样本,我明白了 private void scanLeDevice(final boolean enable) { if (enable) { // Stops scanning after a pre-defined scan period. mHandler.postDelayed(new Runnable() { @Override public void run() { mScanning = false; mBluetoothAdapter.stopLeScan(mLeScanCallback); } }, SCAN_PERIOD); mScanning = true; mBluetoothAdapter.startLeScan(mLeScanCallback); } else { mScanning = false; mBluetoothAdapter.stopLeScan(mLeScanCallback); } } 这会导致mBluetoothAdapter.stopLeScan显示为已弃用。 但是,Startscan不是mBluetoothAdapter的方法。 如何更改它以使其与当前API一起使用?

如何修改Android的蓝牙堆栈以启用A2dp接收器

我正在制作一个录音机应用程序,它使用蓝牙麦克风将音频录制到Android设备上(Nexus 7 – 扎根Android 4.4.2)。 它目前在HFP上实施,一切正常。 蓝牙麦克风是用Bluegiga的WT32蓝牙模块+麦克风输入实现的,通过HFP的音质不是很好,但现在已足够了。 但是,我现在正尝试将蓝牙配置文件更改为A2dp,因为有两个麦克风输入(L / R)和WT32支持A2dp(源)。 经过大量研究后,我发现Android不支持A2dp(接收器),并且可以修改Android的蓝牙堆栈以启用A2dp(接收器)。 我不明白的是如何访问和修改蓝牙堆栈。 如果有答案的人能够分解实现这一目标的步骤,那将是很好的。 我已经尝试过这个问题的答案: 在Android中通过蓝牙接收音频 ,但我似乎无法find要修改的相应文件。 实际上,我甚至不知道我是否正在查找正确的文件夹。 我通过Android-studio的DDMS-File Explorer查看了设备文件。 ps,我对Android应用程序开发还是比较新的,所以我可能误用了一些术语,并为此提前道歉。

蓝牙广播

我想使用蓝牙将数据从一台设备广播到附近的众多设备。 现在,我知道蓝牙广播存在,但可以使用Android现有的API吗? 如果没有,是否还有其他第三方API可供使用? 关于蓝牙广播的另一个问题:即使您从广播开始以来没有收听,您是否可以开始收听正在进行的广播并从中接收数据? 例如,让设备A成为广播公司,并在5秒内广播以下数据: 1 2 3 4 5 6 7 8 9 10 设备B在整个广播过程中接收到数据,因此他收到: 1 2 3 4 5 6 7 8 9 10 接收到的设备C仅在2秒后开始收听,而设备A正在广播5 。 他会按预期收到其余的( 5 6 7 8 9 10 )吗?

我在哪里可以findBlueZ的一些文档?

我正在开发一个使用android 2.1的嵌入式设备的Android应用程序。 蓝牙协议栈是bluez。 我找不到任何与bluez相关的文档,源代码很难阅读,因为它根本没有评论! 似乎有一个bluez维基,但该网站已经停止了一段时间…… 任何有关我可能能够find有关bluez堆栈function的任何帮助/文档的帮助将不胜感激。 谢谢!

Android startBluetoothSco没有启动sco但isBluetoothScoOn返回true

我创建了一个带有示例项目的GitHub仓库,它显示了我在这里询问的以下问题: https://github.com/paulpv/audio-loopback/tree/simplified/src/com/twistpair/wave/experimental/loopback (请坚持使用“简化”分支并忽略“主”分支) 这两个主要文件是: https://github.com/paulpv/audio-loopback/blob/simplified/src/com/twistpair/wave/experimental/loopback/MainActivity.java https://github.com/paulpv/audio-loopback/blob/simplified/src/com/twistpair/wave/experimental/loopback/AudioStateManager.java 免责声明:我目前只使用一台运行CyanogenMod 10 Jelly Bean的三星Epic SPH-D700进行编码和测试。 我没有在其他设备上试过这个,但也许这可能有助于阻止我脱掉头发并发疯。 我一直在努力让Android蓝牙SCO 可靠地启动和停止以及捕获/播放音频! 一旦我可以将手机转入SCO模式,通过AudioRecord和AudioTrack(分别)进行捕获和回放可以正常工作。 我遇到的问题是我无法可靠地将手机送入SCO模式! 使用startBluetoothSco()和setBluetoothScoOn(true)的“互联网”上的示例看起来都很简单直接,但是当我在设备上使用它们时,它们几乎从不可靠地工作。 我创建了自己的测试应用程序,除了启动和停止SCO之外什么都不做,我甚至无法让它可靠地工作! 我的代码侦听BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED EXTRA_STATE==CONNECTED. 我可以可靠地检测何时连接或断开任何耳机。 检测到连接时,我的处理程序立即调用startBluetoothSco()。 A可能会发誓至少一次将SCO_AUDIO_STATE踢到C O NNECTED,但99%的时间它只会导致从DISCONNECTED->CONNECTING->DISCONNECTED过渡。 这是我的GitHub示例应用程序的带注释日志输出: 10-03 17:00:13.970: I/dalvikvm(29487): Debugger is active 10-03 17:00:14.158: I/System.out(29487): Debugger has connected 10-03 17:00:15.779: I/System.out(29487): waiting for debugger to settle… 10-03 17:00:15.978: I/System.out(29487): debugger has settled (1325) 我的应用程序开始关闭Jawbone耳机并更新UI … […]

mBluetoothSocket.connect()打印一行

我一直试图find一个解决方案,但不能。 所以我在Android中开发POS应用程序,我需要使用蓝牙打印机打印销售/购买的收据。 打印,本身工作正常,但每当我调用mBluetoothSocket.connect()时 ,它会在打印件上打印出CONNECT“8869-XX-XXXXXX” ,这是我不想要的。 我不想让连接长时间打开,我希望应用程序只在需要时才能连接。 怎么做到这一点? 任何帮助家伙。 find下面的代码。0提前致谢。 package anil.com.andoirdbluetoothprint; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.util.Set; import java.util.UUID; import android.app.Activity; import android.app.ProgressDialog; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.Toast; public class MainActivity extends […]

在Android上处理蓝牙耳机点击(ACTION_VOICE_COMMAND和ACTION_WEB_SEARCH)

我正在开发一个Android应用程序,我希望它与headset按钮点击进行交互。 我正在使用Android KitKat 4.4在Nexus 5中测试它。 我首先尝试使用简单的耳机(不是无线耳机)。 收到的按钮事件是KEYCODE_HEADSETHOOK (79)。 我创建了一个MEDIA_BUTTON receiver来处理它的点击: 这是持有接收者的活动: public class SearchActivity extends Activity { private AudioManager mAudioManager; private ComponentName mAudioReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); mAudioReceiver = new ComponentName(getPackageName(), MediaButtonIntentReceiver.class.getName()); } @Override protected void onResume() { super.onResume(); mAudioManager.registerMediaButtonEventReceiver(mAudioReceiver); } @Override protected void onPause() { super.onPause(); […]

找出Android蓝牙LE GATT配置文件

我已经实现了Android LE蓝牙示例,它可以find心率监测器并连接到它。 但是,此示例有一个类定义GATT配置文件,如下所示: private static HashMap attributes = new HashMap(); public static String HEART_RATE_MEASUREMENT = “00002a37-0000-1000-8000-00805f9b34fb”; public static String CLIENT_CHARACTERISTIC_CONFIG = “00002902-0000-1000-8000-00805f9b34fb”; static { // Sample Services. attributes.put(“0000180d-0000-1000-8000-00805f9b34fb”, “Heart Rate Service”); attributes.put(“0000180a-0000-1000-8000-00805f9b34fb”, “Device Information Service”); // Sample Characteristics. attributes.put(HEART_RATE_MEASUREMENT, “Heart Rate Measurement”); attributes.put(“00002a29-0000-1000-8000-00805f9b34fb”, “Manufacturer Name String”); } public static String lookup(String uuid, String defaultName) { […]