如果用于模拟蓝牙键盘或鼠标的iPhone/Android应用程序,它似乎非常有用.例如,你打开应用程序,突然你可以在你的iPhone键盘和PC/PS3 /等上打字.与它配对就好像它是一个蓝牙键盘并接收打字的字母.
这个想法对我来说似乎很直观,我认为它不存在的唯一原因是它不可能,但我不明白为什么它不可能.
是否存在蓝牙限制,导致设备无法模拟其他类型的设备?或者,iOS或Android暴露的API的限制可能会抑制这种情况?
编辑:看起来iPhone蓝牙API相当有限,因为您只能与Apple许可的配件进行通信:是否可以开发具有蓝牙功能的iOS应用程序? 这可能会排除其他类型设备仿真的任何内容.但问题仍然是针对Android开放的.
我刚开始一个项目,要求我将Windows 10平板电脑与另一个蓝牙设备配对.
我决定从一个简单的Windows窗体应用程序开始,熟悉这个过程.我在我的解决方案中添加了32feet.NET NuGet包,并且很快就成功搜索了设备并填充了列表框.
client = new BluetoothClient();
devices = client.DiscoverDevices();
if (devices.Length > 0)
{
foreach (var device in devices)
{
lstBTDevices.Items.Add(device.DeviceName);
}
}
else
{
MessageBox.Show("Unable to detect any bluetooth devices");
}
Run Code Online (Sandbox Code Playgroud)
然后我添加了一个事件处理程序,以便我可以选择一个检测到的设备并尝试与它配对.
private void LstBTDevices_SelectedIndexChanged(object sender, EventArgs e)
{
BluetoothDeviceInfo selectedDevice = devices[lstBTDevices.SelectedIndex];
if (MessageBox.Show(String.Format("Would you like to attempt to pair with {0}?", selectedDevice.DeviceName), "Pair Device", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (BluetoothSecurity.PairRequest(selectedDevice.DeviceAddress, "123456"))
{
MessageBox.Show("We paired!");
}
else
{
MessageBox.Show("Failed to pair!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的带有廉价蓝牙2.0适配器的Windows7台式电脑上,这会导致我的手机上出现一个弹出窗口,要求我输入密码.当我输入"123456"时,配对成功.
但是,这就是问题的起点.然后我拿起我的应用程序并在我的Windows10平板电脑上运行它,现在当我选择我的手机时,它会在我的手机上显示一个弹出窗口,其中包含一个随机的6位数密码,并显示一条消息,它应该与我平板电脑屏幕上显示的内容相匹配,配对/取消按钮作为选项.按任一按钮都会导致失败. …
我很困惑它自己的android问题或Java问题.
当我调试一个与蓝牙一起工作的android应用程序时,流程停在了一个catch块上IOException,后来我发现异常e为null ....当我试图从InputStream读取时抛出它
是的,它不是一个NullPointerException但是其他类型的异常是空的 - 更好的说抛出未初始化.
可能吗?在哪种情况下可以抛出这种单元化异常?

我想知道远程物理设备中的哪些事件在监听设备中触发ACTION_ACL_CONNECTED和ACTION_ACL_DISCONNECTED.我的测试结果毫无意义.我已经在几分之一的范围内收集了几个设备:
运行Android 3.1的Galaxy Tab P7500
运行Android 2.2的i5500手机
带有蓝牙USB加密狗的PC winXP
两个带开/关按钮的耳机
首先,我手动配对Tab中的所有设备.除了Tab之外,PC和手机都没有与任何其他设备配对.(标签永远不会以任何方式找到其中一个耳机,但可以通过手动和编程方式轻松找到它.然后我有一个简单的应用程序来启动发现,并监听和显示ACL广播.这就是发生的事情(每次都是一样的,它的疯狂一致):
在PC上启用蓝牙: - 选项卡上没有反应
首次打开耳机电源: - 选项卡上的ACTION_ACL_CONNECTED
再次打开耳机: - 选项卡上的ACTION_ACL_DISCONNECTED和ACTION_ACL_CONNECTED快速连续
禁用选项卡上的蓝牙: - 选项卡上没有反应
在选项卡上启用蓝牙: - 选项卡上的耳机ACTION_ACL_CONNECTED
来自手机的startDiscovery(): - PC是手机找到的唯一设备,虽然手机只与Tab配对,而不是与PC配对.否则,手机只会响应Tab从不作出反应的耳机.
怎么弄出这个烂摊子?即使配对并在范围内上电,也不能依赖导致ACTION_ACL_CONNECT的设备吗?
以下是BroadcastReceiver和onCreate活动的方法,但我不认为此代码中的细节很重要:
BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device != null) {
name = device.getName();
Log.v(TAG, "Device=" + device.getName());
}
else {
name = "None";
} …Run Code Online (Sandbox Code Playgroud) 我必须为Android平板电脑开发一款App,要求将文件打印到蓝牙打印机.通过蓝牙打印是我的应用程序最重要的功能之一.不幸的是,关于这个主题的信息并不多,所以我想征求意见.
据我所知,不可能在Android上使用蓝牙打印(使用本机调用),因为Android的BT Stack不实现BPP(基本打印配置文件).做一点研究我发现了以下替代方案:
软件开发工具包/库
Google Play应用
理想情况下,我不希望被绑定到特定的品牌或打印机型号.现在的问题是:
在此先感谢您的帮助 ;)
我正在尝试通过A2DP/AVRCP发送跟踪信息.现在,音乐完全流式传输,但在"接收器"(即:汽车音频)上,"音轨信息屏幕"是空白的(在那里使用流行的播放器不是这种情况).任何的想法 ?
是否可以通过蓝牙传输音频?在我的研究过程中,我发现它只能使用A2DP(Advanced Audio Distribution Profile).每个Android设备都支持A2DP吗?如果没有,是否可以使用蓝牙在两个Android设备之间传输音频?请帮我理解这个.
我查看了以下链接:
如果您想知道如何使用32feet.NET库与蓝牙设备通信,请阅读解决方案
我目前正在尝试通过蓝牙在计算机和自建的.NET Gadgeteer原型之间进行通信.
Gadgeteer原型包括主板,电源和蓝牙模块.模块处于可发现模式.
在计算机上,基于32feet .NET蓝牙的自定义蓝牙程序正在运行.程序检测范围内的所有蓝牙设备并尝试与它们配对.但是,目前还没有自动完成,我必须输入设备的配对代码.
如何在不输入配对代码的情况下配对设备?
找到设备,问题是配对部分.我做了很多实验,但没有找到解决方案......
foreach (BluetoothDeviceInfo device in this.deviceList)
{
try
{
//BluetoothClient client = new BluetoothClient(this.CreateNewEndpoint(localAddress));
//BluetoothEndPoint ep = this.CreateNewEndpoint(device.DeviceAddress);
EventHandler<BluetoothWin32AuthenticationEventArgs> handler = new EventHandler<BluetoothWin32AuthenticationEventArgs>(HandleRequests);
BluetoothWin32Authentication auth = new BluetoothWin32Authentication(handler);
BluetoothSecurity.PairRequest(device.DeviceAddress, null);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码块启动配对并且它可以工作,但Windows要求我输入设备的配对代码.我读到了关于BluetoothWin32Authentication以防止这种情况,但我没有把它弄好.
private void HandleRequests(object that, BluetoothWin32AuthenticationEventArgs e)
{
e.Confirm = true;
}
Run Code Online (Sandbox Code Playgroud)
这是事件处理程序的代码(http://32feet.codeplex.com/wikipage?title=BluetoothWin32Authentication)
如果你只想让SSP设备连接时允许配对继续,那么处理回调和设置e.Confirm = True就足够了 - 但这有点不安全......
我很困惑-.-目标是应用程序和gadgeteer模块可以在没有任何用户干扰的情况下向两个方向发送数据.
没有用户交互,我无法自动配对设备吗?
是否真的如果两个设备已经配对,他们可以在没有用户交互的情况下交换数据?
目标是读取蓝牙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);
}
}
Run Code Online (Sandbox Code Playgroud)
导致mBluetoothAdapter.stopLeScan显示为已弃用.但是Startscan不是方法mBluetoothAdapter.
如何更改它以使其与当前API一起使用?
我有一个通过蓝牙连接到RaspberryPi的应用程序,并在收到一些数据时将相同的数据循环到它.
我有一些连接问题,所以需要这个解决方法将我的Android手机连接到RaspberryPi:IOException:读取失败,套接字可能关闭 - Android 4.3上的蓝牙
由于某种原因,Android手机正在接收自己的输出.字符串"Hello Raspberry.这是我,AndroidPhone"以永无止境的循环发送到输出.传入的数据(来自RaspberryPi)也在一个永无止境的循环中读取.
但不知何故,我不仅收到RaspberryPi的数据,还收到通过智能手机发送的字符串.这是我的代码:
public class MainActivity extends AppCompatActivity {
private BluetoothAdapter bluetoothAdapter;
UUID SERIAL_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
@Override
protected void onCreate(Bundle savedInstanceState) {
// (...)
// Only GUI-stuff until this point
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice raspberryPi = bluetoothAdapter.getRemoteDevice("B8:27:EB:56:DC:B2");
BluetoothSocket btSocket;
try {
btSocket = raspberryPi.createRfcommSocketToServiceRecord(SERIAL_UUID);
btSocket.connect();
} catch (IOException e) {
Log.e("BTError", e.getMessage());
// Workaround, found on: https://stackoverflow.com/questions/18657427/ioexception-read-failed-socket-might-closed-bluetooth-on-android-4-3
try {
Log.e("BTError", "Trying fallback...");
btSocket = (BluetoothSocket) raspberryPi.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(raspberryPi, 1);
btSocket.connect();
(new Thread(new …Run Code Online (Sandbox Code Playgroud)