Articles of android bluetooth

Android广播接收器蓝牙事件捕捉

我正试图用广播接收器捕捉蓝牙状态变化。 我的清单: Receiver onReceive方法: public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d(“BroadcastActions”, “Action “+action+”received”); int state; BluetoothDevice bluetoothDevice; switch(action) { case BluetoothAdapter.ACTION_STATE_CHANGED: state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); if (state == BluetoothAdapter.STATE_OFF) { Toast.makeText(context, “Bluetooth is off”, Toast.LENGTH_SHORT).show(); Log.d(“BroadcastActions”, “Bluetooth is off”); } else if (state == BluetoothAdapter.STATE_TURNING_OFF) { Toast.makeText(context, “Bluetooth is turning […]

BLE蓝牙低功耗设备中的身份validation问题

我们正在制造一个带有BLE接口的物联网设备,它使用HM-11( http://www.seeedstudio.com/wiki/Bluetooth_V4.0_HM-11_BLE_Module )分线板托管芯片CC2541( http://www.ti。 com / product / CC2541 )。 validation方法设置为2:Auth with PIN 显示可用身份validation模式的数据表中的剪辑如下: 63. Query/Set Module Bond Mode Send Receive Parameter AT+TYPE? OK+Get:[para1] None AT+TYPE[para1] OK+Set:[para1] Para1: 0~2 0:Not need PIN Code 1:Auth not need PIN 2:Auth with PIN 3:Auth and bond Default: 0 对于低于Android 5.0版本的设备,它可以正常工作。 然而 对于Android版本5.0的设备,配对对话框显示没有diaplyed-pin或pin-enter-field,当单击pair按钮时,它无法配对 – 抱怨 由于PIN或密钥不正确,无法与MyApp配对。 对于使用Android 5.1版的设备,它甚至不会显示配对对话框,也无法配对。 注意:尝试重启设备,忘记设备,清除设备的绑定信息。 […]

BlueZ vs Bluedroid蓝牙堆栈

BlueZ有很多文档和所有文档。 同样,据我所知,BlueZ支持A2DP接收器支持。 同时,通过修改同一个内部的audio.conf文件,可以使android设备充当A2DP接收器。 我也知道从android 4.2开始,BlueZ堆栈被Broadcom的Bluedroid堆栈取代。 我搜索了很多关于Bluedroid堆栈的信息。 但我无法find相同的细节。 希望有人可以帮我解决以下疑惑。 1)。 Bluedroid是否支持A2DP接收器? 2)。 audio.conf文件是否可用于具有bluedroid堆栈的设备? 3)。 我将通过直接调用BlueZ堆栈的API来为Android设备编写A2DP接收器支持。 但我最后的问题是Bluedroid堆栈是否也可以使用相同的? 希望Bluedroid只是BlueZ的扩展。 请帮忙。

通过蓝牙打印机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 […]

在Android上连接Xamarin的配对蓝牙设备

当应用程序通过A2DP或Hands Free Profile启动时,我们需要我们的应用程序能够自动连接到配对的蓝牙设备。 我们正在使用Xamarin(monodroid),用于Android平台。 我发现了这个stackoverflow问题:以编程方式连接到配对的蓝牙设备 但它与本土方法有关(见kcoppock的回答)。 我想知道是否有办法通过Xamarin实现这一目标。 我们可以连接到SPP端点,因为它是基于RFCOMM的连接,但我们需要它和音频连接,所以我们想要一种连接到A2DP的方法。 更新1: 我们尝试使用CreateInsecureRfcommSocketToServiceRecord方法进行连接,如下所示: mmSocket = device.CreateInsecureRfcommSocketToServiceRecord(0000110A-0000-1000-8000-00805F9B34FB); mmSocket.Connect(); 在致电Connect时,我们收到错误消息: read failed, socket might closed or timeout, read ret: -1 堆栈跟踪以: Java.IO.IOException at Android.Runtime.JNIEnv.CallVoidMethod (IntPtr jobject, IntPtr jmethod) [0x00062] in /Users/buil… 更新2: 顺便说一句,当我们尝试使用kcoppock的方法通过本机java测试应用程序连接时,连接代码似乎没有错误,但设备没有作为A2DP耳机连接。 我们所看到的唯一能够实现 这一目标的 编程方式是Google Play应用 ,它certificate了这种可能性。

基于RSSI估计信标接近度/距离 – 蓝牙LE

我有一个简单的iOS应用程序,显示它使用诸如“立即”,“近”等expression式检测到的蓝牙LE信标的接近度。我需要在Android上编写类似的东西。 我已经按照Android开发人员的教程进行了操作 ,我能够列出检测到的设备,现在想要估算距离/接近度 – 这就是它成为问题的地方。 根据这个SO线程,它只是一些数学计算。 但是,它们要求我提供txPower值。 根据Dave Smith的本教程 (以及与此蓝牙SIG声明的交叉引用),它应该由信标设备广播为types0x0A的“AD结构”。 所以我所做的是解析AD结构并查找与该types匹配的有效负载。 问题:我有4个信标 – 2个estimotes和2个appflares。 estimotes根本不播放txPower,appflares将它们广播为0。 这里有什么我想念的吗? iOS应用程序似乎没有任何问题处理它,但使用iOS SDK它在幕后做,所以我不知道如何产生完全相同或类似的行为。 还有其他方法可以解决我的问题吗? 如果您想查看我用来解析AD结构的代码,可以从前面提到的Dave Smith的github中获取,可以在这里find。 我对该类所做的唯一更改是添加以下方法: public byte[] getData() { return mData; } 这就是我处理扫描回调的方法: // Prepare the callback for BLE device scan this.leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { if […]

蓝牙LE ScanFilters无法在Android M上运行

以下代码适用于运行Android 5.1.1(Build LMY48M)的Nexus 9,但不适用于运行Android 6.0的Nexus 9(Build MPA44l) List filters = new ArrayList(); ScanSettings settings = (new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)).build(); ScanFilter.Builder builder = new ScanFilter.Builder(); builder.setManufacturerData((int) 0x0118, new byte[]{(byte) 0xbe, (byte) 0xac}, new byte[]{(byte) 0xff, (byte)0xff}); ScanFilter scanFilter = builder.build(); filters.add(scanFilter); mBluetoothLeScanner.startScan(filters, settings, new ScanCallback() { … }); 在Android 5.x上,当看到与扫描filter匹配的制造商广告时,上述代码产生回调。 (参见下面的示例Logcat输出。)在带有MPA44l的Nexus 9上,没有收到回调。 如果您注释掉扫描filter,则会在Nexus 9上成功收到回叫。 09-22 00:07:28.050 1748-1796/org.altbeacon.beaconreference D/BluetoothLeScanner﹕ […]

Android上的蓝牙低功耗专用与公共地址

蓝牙低功耗设备由其地址唯一标识(在Android API中,他们将其称为MAC地址,并将其表示为冒号分隔的hex值,例如11:aa:22:bb:33:cc)。 但要唯一识别BLE地址,您需要知道它是公共地址还是私人地址。 实质上,识别地址需要49位,而不是48位。 随机地址可以是静态随机地址,不可解析私有地址或可解析私有地址,这些types在两个最重要的字节(分别为11,00和10)中由位模式分隔。 但是我没有看到只要通过查看地址中的48位就可以将公共地址和随机地址分开的任何地方。 那么这在Android API中如何运作? 当他们不知道您指定的地址是公开的还是随机的时,他们如何知道要连接的设备? 有问题的API例如是getRemoteDevice函数。 它说: Valid Bluetooth hardware addresses must be upper case, in a format such as “00:11:22:33:AA:BB”. The helper checkBluetoothAddress(String) is available to validate a Bluetooth address. A BluetoothDevice will always be returned for a valid hardware address, even if this adapter has never seen that device. […]

Android蓝牙和WakeLock关系

我正在开发一个在后台运行的Android应用程序,并支持蓝牙配件。 我想在后台不断收听蓝牙设备尝试打开手机sockets。 我的问题是,是否有可能在不经常保留部分唤醒锁的情况下实现这一点,因为这显然会产生严重的电池后果。 所以我想知道的是蓝牙对手机入睡的影响。 打开蓝牙sockets时手机是否保持清醒状态? 如果设备尝试连接,蓝牙芯片是否会自动唤醒Android? 我试图做一些测试来回答这些问题,但很难分清唤醒锁的发生情况; 此外,我不知道我是否可以依赖于我观察到的行为或者是否可以在其他设备上进行更改。

如何确定Android设备是否支持蓝牙低功耗

似乎Nexus 7第一代不支持蓝牙低功耗,至少当我从教程中完全按照步骤进行操作时 http://developer.android.com/guide/topics/connectivity/bluetooth-le.html 我有以下代码的应用程序完成: if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show(); finish(); } 当然,我检查,蓝牙启用。 所以问题是,如何确定设备是否支持蓝牙低功耗标准? 更新:我正在使用android 4.3