我已经阅读过有关类似问题的几个问题。但其中大多数都与第三方蓝牙设备连接有关。我需要的是,在IOS和正在等待连接的服务器小程序之间建立蓝牙串行连接。这个小程序应该在Windows或MAC OS上运行。以下是服务器applet的Java代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import static my.remote.RemoteUI.OSName;
import javax.bluetooth.*;
import javax.microedition.io.*;
import static my.remote.ProcessInput.line;
import static my.remote.RemoteUI.OSName;
/**
* Class that implements an SPP Server which accepts single line of
* message from an SPP client and sends a single line of response to the client.
*/
public class Sspserver implements Runnable {
private static boolean Connected = true;
//start server
private void startServer() throws IOException{
//Create a UUID for SPP
UUID uuid = new UUID("1101", true);
//Create the servicve url
String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server";
//open server url
StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString );
//Wait for client connection
System.out.println("\nServer Started. Waiting for clients to connect...");
StreamConnection connection=streamConnNotifier.acceptAndOpen();
RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);
System.out.println("Remote device address: "+dev.getBluetoothAddress());
System.out.println("Remote device name: "+dev.getFriendlyName(true));
//read string from spp client
InputStream inStream=connection.openInputStream();
BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream));
while(Connected){
try {
String lineRead=bReader.readLine();
System.out.println(lineRead);
String com = lineRead.substring(0, lineRead.length());
CommandActivity command = new CommandActivity();
if ((lineRead != null) && (OSName != null)) {
command.Command(com,OSName);
System.out.println(com);
}
}catch(Exception e) {
return;
}
}
}
@Override
public void run() {
try {
//display local device address and name
LocalDevice localDevice = LocalDevice.getLocalDevice();
System.out.println("Address: "+localDevice.getBluetoothAddress());
System.out.println("Name: "+localDevice.getFriendlyName());
//Sspserver sampleSPPServer=new Sspserver();
startServer();
} catch (BluetoothStateException ex) {
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
CommandActivity
类只是解析来自设备的数据行。 Android设备可以使用PC的MAC地址轻松连接到此服务器。但对于IOS,我找不到蓝牙套接字连接的任何解决方案。
我试过了EAAccessoryManager
,但遗憾的是IOS设备无法将PC作为附件进行检测。它需要Supported external accessory protocols
个定义,但我找不到所有PC或MAC协议。
我也尝试了CoreBluetooth
。但是这个小程序不是广告名称或服务/特征的UUID。
必须有一种我可能缺失的简单方法。对于具有许多功能(如IOS)的操作系统,简单的串行连接应该不是问题。任何建议表示赞赏。谢谢。
答案 0 :(得分:0)
除非您连接的设备经过MFi认证,否则您无法通过蓝牙对iOS应用程序进行串口连接,这样您就可以使用外部附件框架了。由于您的PC不是MFi认证设备,因此无法正常工作。
您将需要您的PC作为BLE设备进行宣传,以便您可以使用Core Bluetooth或使用其他连接方法,例如通过wifi的TCP / IP。