在没有配对的情况下使用RfcommSocket和BLE?

时间:2018-03-21 20:36:34

标签: java android bluetooth-lowenergy

我是java和android的新手,我目前正在开发一个简单的数据记录应用程序,用于通过蓝牙发送的信息。我最近改用了经典蓝牙的HM-10(CC41)BLE模块。由于我不知道使用Gatt特性来创建连接和接收数据,我想继续使用套接字通信。我的手机S7边缘无法与BLE设备配对,因此在启动RfcommSocket之前,我不能以编程方式创建绑定。有没有办法在没有配对的情况下继续使用套接字通信?最后,我已经拥有了BLE模块的MAC地址,所以我宁愿不进行扫描。这是我的相关代码:

公共类MainActivity扩展AppCompatActivity实现了Runnable {

private BluetoothAdapter adapter;
private InputStream inputStream;
private OutputStream outputStream;
private Thread thread;
private TextView Status;
private TextView Connection;
private BluetoothSocket socket = null;
public boolean threadStatusInitial; //changed the status global variables to public static
public boolean threadStatus;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    threadStatusInitial=true;
    threadStatus=true;

    Status=(TextView) findViewById(R.id.StatusID);

    Connection=(TextView) findViewById(R.id.ConnectionStatus);

    adapter= BluetoothAdapter.getDefaultAdapter();

    if(adapter==null){

        Toast.makeText(this,"bluetooth is unavailable",Toast.LENGTH_SHORT).show();

        finish();
        return;
    }
    thread=new Thread(this);

}

public void connect(View view){
    BluetoothDevice device=adapter.getRemoteDevice("3C:A3:08:94:C3:11");


            try {
                socket=device.createRfcommSocketToServiceRecord(device.getUuids()[0].getUuid());

                socket.connect();

                Connection.setText("Connected");

                inputStream=socket.getInputStream();

                outputStream=socket.getOutputStream();


                if (threadStatusInitial){
                   thread.start();
                   threadStatusInitial=false; //this ensures that the thread.start() method will only be called during the initial connection
               }
               threadStatus=true; 





            } catch (IOException e) {
                Toast.makeText(this,"Can't Connect",Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }






}

与线程相关的全局变量与断开连接期间维护日志记录线程并重新连接到BLE模块有关。

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,蓝牙低功耗并不意味着使用套接字进行连接和数据传输。 BLE的重点是尽可能降低套接字无法实现的功耗,因为无论我们是否发送任何数据,都会保持继续数据传输流。 您可以从此链接获得有关android-HM10通信的帮助。

http://android-er.blogspot.in/2015/12/connect-hm-10-ble-module-to-android.html

答案 1 :(得分:0)

蓝牙经典和蓝牙低功耗,虽然相关的标准不同。对于经典连接,您可以使用类似于您所说明的代码。但是BLE客户端却大相径庭。需要完全不同的客户端代码。我认为你的设备HM-10(CC41)BLE模块可能只支持BLE。我相信你唯一的选择是迁移到BLE。