IOS蓝牙串行连接到远程PC / MAC

时间:2016-12-13 11:31:25

标签: java ios bluetooth spp

我已经阅读过有关类似问题的几个问题。但其中大多数都与第三方蓝牙设备连接有关。我需要的是,在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)的操作系统,简单的串行连接应该不是问题。任何建议表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

除非您连接的设备经过MFi认证,否则您无法通过蓝牙对iOS应用程序进行串口连接,这样您就可以使用外部附件框架了。由于您的PC不是MFi认证设备,因此无法正常工作。

您将需要您的PC作为BLE设备进行宣传,以便您可以使用Core Bluetooth或使用其他连接方法,例如通过wifi的TCP / IP。