如何通过蓝牙在Android中发送命令?

时间:2016-01-29 20:34:58

标签: java android bluetooth command

我通过蓝牙向蓝牙芯片发送命令有问题。

我有智能手机和BT芯片配对好。因为我可以发送" text"

BluetoothSPP bt;



void Heat() {
        heat.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        bt.send("Text", true);
                    }
                }
        );
    }

 public void send(String data, boolean CRLF) {
    if(mChatService.getState() == BluetoothState.STATE_CONNECTED) {
        if(CRLF) 
            data += "\r\n"; 
        mChatService.write(data.getBytes());
    }
}

Heat是xml文件上的Button。热量只做这个代码。

但我不知道如何改造以证明发送和接收这些命令:

Send: "$$$"                           Receive: "CMD"    
Send: "S&,0404\r"                       Receive: "AOK"   
Send: "S&,0400\r"                      Receive: "AOK"    
Send: "---\r"                          Receive: "END"

我看到发送文本是成功的,因为芯片有LED接通,如果接受一些信息。

请给我建议或示例。

在创建

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_autoconnect);
    Log.i("Check", "onCreate");




    bt = new BluetoothSPP(this);

    if(!bt.isBluetoothAvailable()) {
        Toast.makeText(getApplicationContext()
                , "Bluetooth is not available"
                , Toast.LENGTH_SHORT).show();
        finish();
    }



    bt.setBluetoothConnectionListener(new BluetoothConnectionListener() {

        public void onDeviceConnected(String name, String address) {

            Toast.makeText(getApplicationContext()
                    , "Connected to " + name
                    , Toast.LENGTH_SHORT).show();
        }

        public void onDeviceDisconnected() {
            Toast.makeText(getApplicationContext()
                    , "Connection lost"
                    , Toast.LENGTH_SHORT).show();
        }

        public void onDeviceConnectionFailed() {
            Log.i("Check", "Unable to connect");
        }
    });




    bt.setAutoConnectionListener(new BluetoothSPP.AutoConnectionListener() {
        public void onNewConnection(String name, String address) {

            Log.i("Check", "New Connection - " + name + " - " + address);
        }

        public void onAutoConnectionStarted() {
            Log.i("Check", "Auto menu_connection started");
        }
    });

    TextView btnConnect = (TextView)findViewById(R.id.btnConnect5);
    btnConnect.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {



            if (bt.getServiceState() == BluetoothState.STATE_CONNECTED) {
                bt.disconnect();
            /**    Toast.makeText(getApplicationContext()
                        , "pripojene"
                        , Toast.LENGTH_SHORT).show();  **/

               // bt.disconnect();
            } else {
            /**    Toast.makeText(getApplicationContext()
                        , "nepripojene"
                        , Toast.LENGTH_SHORT).show();  **/
                Intent intent = new Intent(getApplicationContext(), DeviceList.class);
                startActivityForResult(intent, BluetoothState.REQUEST_CONNECT_DEVICE);

            }

        }

    });





    Log.i("Check", "onCreate");

    textStatus = (TextView)findViewById(R.id.textStatus2);

    bt = new BluetoothSPP(this);

    if(!bt.isBluetoothAvailable()) {
        Toast.makeText(getApplicationContext()
                , "Bluetooth is not available"
                , Toast.LENGTH_SHORT).show();
        finish();
    }

我可以与芯片通信,但我不知道如何发送命令。我想你只是改造 bt.send .. 如果?

1 个答案:

答案 0 :(得分:0)

经过一些研究后,我发现您使用的是来自https://github.com/akexorcist/Android-BluetoothSPPLibraryBluetoothSPP库。

我不知道你为什么使用这个库,或者即使你必须使用它(如需求)但是看一下源代码,我可以看到它只是 Android内置蓝牙的包装器用于RFCOMM通信的经典SDK (也称为Serial Port Protocol - SPP )。

无论如何,所有与发送/接收数据相关的代码似乎都是在BluetoothService

中处理的

我建议您创建自己的包装器,以便控制正在进行的蓝牙连接的。然后,您将能够发送您想要的内容,因为它只需将字节写入流并在另一端读取它们。但是,您不确定您正在使用的远程Bluetooh chip是什么。

如果有关于要发送内容的某种文档,请在通过流发送字节时按照该文档进行操作。

再次,查看BluetoothSPP库的源代码,我只看到围绕Google的蓝牙聊天示例的简单包装器。就是这样,这里没有魔力。