Tag: 蓝牙

无法打开与手机的SCOAudio连接

我正在尝试使用OS X 10.8.2上的IOBluetooth framework来连接模拟电脑的蓝牙手机作为免提设备。 我可以成功地与手机进行连接,手机可以将连接识别为连接到手机的免提。 但是,当我尝试拨打电话,想要将audio发送到Mac(通过select信号源作为免提),audio永远不会到达计算机。 在这一点上,蓝牙框架试图打开与设备的SCO Audio connection ,但连接build立永远不会成功,我得到scoConnectionOpened状态的错误代码0x0D状态码。 我正在使用IOBluetoothAddSCOAudioDevicefunction将SCOaudio设备连接到蓝牙设备,并始终成功。 //btDevice is paired res=IOBluetoothAddSCOAudioDevice((IOBluetoothDeviceRef) btDevice,NULL); if(res != kIOReturnSuccess) { self.error.title = [NSString stringWithFormat: @"Could not attach the Audio device. Try paring device again"]; } 控制台日志说 内核[0]:[SendHCIRequestFormatted] ###错误:[0x0428](设置同步连接) – 发送请求失败(错误= 0x000D(kBluetoothHCIErrorHostRejectedLimitedResources)) 内核[0]:REQUIRE_NO_ERR失败:0xd – 文件:/SourceCache/IOBluetoothFamily_kexts/IOBluetoothFamily-4090.4.33/Core/Family/Drivers/IOBluetoothSCOAudioDriver/IOBluetoothSCOAudioDevice.cpp:872 24/11/2012 4:02:13 PM 虽然控制台日志说有限的资源,但我已经尝试了多个电话充满电池。 我难住这个,只是想着如果我需要做任何特别的或不同的事情? 在此先感谢非常赞赏的帮助。

与Android使用手持式蓝牙打印机

我有一个蓝牙手持打印机,可以使用我的Mac(使用Coolterm)使用SPP连接进行通信。 当我试图从Android(使用平台7)做同样的事情时,我遇到了很多问题: 打印机似乎不支持/需要PIN身份validation。 当从OSX进行连接时,我只是select了“不使用引脚”的选项并将其配对。 在Android中,当我使用device.createRfcommSocketToServiceRecord() ,它总是要求我input一个PIN / Key(我没有/需要)。 我使用reflection技巧解决了这个问题: Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); BluetoothSocket connection = (BluetoothSocket) m.invoke(device, 1); 我不确定这是否真正起作用,但是打印机上的闪烁LED不再闪烁,这使我相信这样做。 一旦我有套接字,我尝试写字节数据的stream使用: byte[] buffer = new byte[3]; buffer[0] = (byte) 0x8A; buffer[1] = (byte) 0xC1; buffer[2] = (byte) 0x04; outStream.write(buffer); int response = inStream.read(); mySocket.close(); 在OSX上从Coolterm发送相同的三字节序列从打印机打印testing页。 但是,这似乎使线程挂在Android(读)。 有什么我在这里错过吗? 编辑:这似乎只有当我把通道设置为1。所以这意味着我在这里的东西。

将audio路由到Android上的蓝牙耳机(非A2DP)

我有一个非A2DP单耳耳机BT耳机(Plantronics 510),并希望与我的Android HTC Magic一起使用,以收听低质量的audio,如播客/有声读物。 经过大量的search,我发现只有电话audio可以路由到非A2DP蓝牙耳机。 (我想知道如果你已经find了一个现成的解决scheme,将各种audio路由到非A2DP BT耳机) 所以我想通过编程方式,我可以将audio传输到携带电话audio的stream。 这样我就会骗过手机将我的mp3audio传送到我的BT耳机。 我写了以下简单的代码。 import android.content.*; import android.app.Activity; import android.os.Bundle; import android.media.*; import java.io.*; import android.util.Log; public class BTAudioActivity extends Activity { private static final String TAG = "BTAudioActivity"; private MediaPlayer mPlayer = null; private AudioManager amanager = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); amanager = […]

ActivityManager:警告:Activity没有启动,它的当前任务已经被提前

package supa.mack.doppler; import java.util.Set; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.bluetooth.*; import android.widget.Toast; public class doppler_test extends Activity { TextView out; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); out = (TextView) findViewById(R.id.out); // Getting the Bluetooth adapter BluetoothAdapter […]

错误检查是否在Android中启用了蓝牙(REQUEST_ENABLE_BT无法parsing为variables)

我正在尝试这样做: BluetoothAdapter bt = BluetoothAdapter.getDefaultAdapter(); if (bt == null){ //Does not support Bluetooth status.setText("Your device does not support Bluetooth"); }else{ //Magic starts. Let's check if it's enabled if (!bt.isEnabled()){ Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); } } 但是我得到这个错误: REQUEST_ENABLE_BT无法parsing为variables 我该如何解决?

当我正在进行程序配对时,如何避免或解除Android的蓝牙配对通知?

我有一个应用程序,我在程序控制蓝牙配对和解除配对。 我可以在连接之前配对,然后解除配对。 我需要这样做的原因是特定于我的应用程序,而不是我的问题的范围。 基本上我正在做的是: 按照本答案中的描述获取IBluetooth对象的参考ib 为android.bluetooth.device.action.PAIRING_REQUEST注册一个BroadcastReceiver 调用ib.createBond(address) 等待BroadcastReceiver触发 convertPinToBytes()将用户引脚转换为字节 从BroadcastReceiver中调用ib.setPin(address, pinBytes) 无论如何,这种方法效果很好,除了当我进行配对时,我会在状态栏中得到一个通知,要求用户input一个PIN来完成配对。 但是这实际上是不必要的,因为当用户看到这个时候,我的应用程序已经使用了setPin() 。 我真的很喜欢这个通知要么a)根本不出现,或b)被自动解除某种方式。 我意识到这可能是不可能的,但我想我会问,如果有人有一个创造性的想法。

以编程方式连接到配对的蓝牙设备

有没有办法,使用Android SDK,以编程方式连接到已经配对的蓝牙设备? 换句话说:我可以进入设置 – >无线和networking – >蓝牙设置,然后点击设备(列为“配对但未连接”),此时它将连接。 我希望能够以编程方式做到这一点,但没有办法做到这一点。 我看到了创build一个RFCOMM套接字的选项,对于一个SPP设备,我假设也会做连接部分,但是对于一个A2DP设备,实际的数据传输将由操作系统来处理,而不是我的应用程序,我认为这不适用?

iBeacon“远”,“近”和“即时”的标称距离是多less?

我一直在使用iOS设备作为广播者和接收者,使用iOS 7中新的iBeacon API。 文档没有详细描述接收设备应该在哪个距离看到每个接近度指示符,并具体地将其称为“相对”。 当试用一个演示应用程序,我观察这些距离(iPhone ==接收器,iPad ==广播): 远 – 50英尺? 近 2-3英尺 立即 – 2英寸 这对我来说似乎非常小,CLBeaconRegion类参考中可能有一个提示,它允许您从1米开始指定设备的信号强度。 peripheralDataWithMeasuredPower: 检索可用于将当前设备通告为信标的数据。 参数 measuredPower 设备的接收信号强度指示(RSSI)值(以分贝测量)。 该值代表距离一米处的信标的实测强度,并在测距期间使用。 指定nil以使用设备的默认值。 我的业余校准产生-60,我设置和重新testing: 数百(英尺)英尺 近〜50英尺 立即 – 1米(略less) 根据苹果的说法,我的第二个testing结果是“理想”范围吗? 他们距离我在第一次testing中经历的“默认”设置真的很远。 或者我应该考虑这些范围根据我的需要“可校准”?

在Android 6.0上需要启用蓝牙低能耗扫描的位置

升级到Android版本6.0后,只有在设备上启用位置服务的情况下,蓝牙低功耗(BLE)扫描才能工作。 请参阅此处以供参考: Android 6.0上的Bluetooth Low Energy startScan无法find设备 基本上,您需要为应用程序以及电话启用权限。 这是一个错误? 有没有实际启用的位置服务可以扫描? 我不想有所有我的应用程序的位置。 编辑我没有提到,我在API 21中提供的BluetoothLeScanner使用startScan()方法。我没有与该方法需要清单中的课程和罚款位置权限。 我只是不希望我的应用程序的用户必须在他们的设备(GPS等)上启用位置服务才能使用我的应用程序。 之前, startScan()方法将运行并返回结果,并在手机上禁用定位服务。 然而,在棉花糖,同样的应用程序将“扫描”,但沉默失败,没有结果时,位置服务没有启用电话和课程/罚款位置权限仍然在清单中没有结果。

在Android上使用蓝牙的服务发现失败例外

我目前正在研究一个通过蓝牙连接到仪器的Android应用程序,需要编写string命令并接收string响应。 目前,我有通过Wi-Fi连接/读/写TCP / IP的工作,现在试图实现蓝牙。 但是我遇到了一些障碍。 我一直在寻找networking,试图find类似的例子,并没有任何运气。 我一直在使用Android开发人员资源的例子:蓝牙聊天作为我的主要参考点。 我目前的代码似乎工作..然后它会在连接点引发服务发现失败的exception。 我正在使用DeviceListActivity类来发现和select要连接的设备。 它返回一个活动结果,然后我的蓝牙类等待它来处理,然后连接到它。 下面的代码几乎与蓝牙聊天应用程序相同。 public void onActivityResult(int requestCode, int resultCode, Intent data) { if(!m_BluetoothAdapter.isEnabled()) { m_BluetoothAdapter.enable(); } switch (requestCode) { case REQUEST_CONNECT_DEVICE: // When DeviceListActivity returns with a device to connect if (resultCode == Activity.RESULT_OK) { // Get the device MAC address String address = data.getExtras() .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS); // […]