Android蓝牙模块连接后怎么接收数据?求助

咖喱不见不散啊
  • 69
package myapplication.com.myapplicationble;

import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothServerSocket;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupMenu;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {

    private BluetoothAdapter BA;
    BluetoothServerSocket mmServerSocket;

    private static String address = "20:16:09:26:81:80"; // <==应填写蓝牙串口模块的蓝牙地址。
    private BluetoothSocket btSocket = null;
    private OutputStream outStream = null;
    public InputStream inStream = null;
    EditText editText;
    TextView textView;
    Button button, button1;
    private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

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

        initView();

    }
    /**
     * 连接蓝牙
     * **/
    public void connect() {
        BA = BluetoothAdapter.getDefaultAdapter();
        BluetoothDevice device = BA.getRemoteDevice(address);

//          pairedDevices = BA.getBondedDevices();
        try {
            btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
            new  ReceiveDatas(btSocket).start();
        } catch (IOException e) {
        }
        BA.cancelDiscovery();
        try {
            btSocket.connect();
            String s="sm\n";
            outStream = btSocket.getOutputStream();
            outStream.write(s.getBytes());
            //outStream.write(0x41);
            inStream = btSocket.getInputStream();
            Jieshou();
          //  System.out.println("**" + inStream.toString());
          //  System.out.println("**" + inStream.read());
           //  int x = inStream.read();
            //outStream.write(x+1);
           // System.out.println("****--"+x);



        } catch (IOException e) {
        }
        try {
          //  btSocket.close();
        } catch (Exception e2) {

            // Log .e(TAG,"ON RESUME: Unable to close socket during connection failure", e2);
        }
    }

    public void initView() {


        editText = (EditText) findViewById(R.id.edit);
        textView = (TextView) findViewById(R.id.textView);
        button = (Button) findViewById(R.id.button);
        button1 = (Button) findViewById(R.id.button1);
        BA = BluetoothAdapter.getDefaultAdapter();
       /**
        * 连接蓝牙
        * */
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("***11");
                as();
            }
        });
        /**
         * 发送信息 可以发送了
         * **/
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = editText.getText().toString().trim();
                try {
                    outStream = btSocket.getOutputStream();
                    inStream=btSocket.getInputStream();
                    outStream.write(s.getBytes());


                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });


    }



/**
 *
 *   连接蓝牙
 * **/
    public void as() {
        new AsyncTask() {

            @Override
            protected String doInBackground(Object[] params) {

                connect();
                return null;
            }

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(Object o) {
                super.onPostExecute(o);
                Toast.makeText(getApplicationContext(), "2", Toast.LENGTH_SHORT).show();
            }
        }.execute();
    }
/**
     * 
     * */
    public  void Jieshou() {

        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){


                    ByteArrayOutputStream  byteArrayOutputStream=null;
                    byteArrayOutputStream = new ByteArrayOutputStream();
                    try {
                        inStream=btSocket.getInputStream();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    byte[] buffer = new byte[1024];// 缓冲数据流
                    int temp = 0;
                    //   while( (temp = inStream.read(buffer)) != -1) {
                    //  os.write(buffer, 0, temp);
                    byteArrayOutputStream.write(buffer, 0, temp);
                    //   }
                    System.out.println("*shuju*"+byteArrayOutputStream.toByteArray().toString());
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            }
        }).start();
    }

  
}

已经可以发送信息到蓝牙了,可是怎么接收数据啊?求助

回复
阅读 6.3k
2 个回答

自己找了个接受数据的线程……

private class ConnectedThread extends Thread {
       private final BluetoothSocket socket;
       private final InputStream inputStream;
       private final OutputStream outputStream;
       public ConnectedThread(BluetoothSocket socket) {
           this.socket = socket;
           InputStream input = null;
           OutputStream output = null;
           try {
               input = socket.getInputStream();
               output = socket.getOutputStream();
           } catch (IOException e) {
               e.printStackTrace();
           }
           this.inputStream = input;
           this.outputStream = output;
       }
       public void run() {
           byte[] buff = new byte[1024];
           int bytes;
           while (true) {
               try {
                   bytes = inputStream.read(buff);
                   String str = new String(buff, "ISO-8859-1");
                   str = str.substring(0, bytes);
                   Log.e("recv", str);

                   Message message=handler.obtainMessage();
                   message.obj=str;
                   handler.sendMessage(message);
               } catch (IOException e) {
                   e.printStackTrace();
                   break;
               }
           }
       }
       public void write(byte[] bytes) {
           try {
               outputStream.write(bytes);
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       public void cancel() {
           try {
               socket.close();
           } catch (IOException e) {
               e.printStackTrace();
           }
       }
   }

感觉你的写法有点奇怪……

clipboard.png

mBluetoothGattCallback 是 BluetoothGattCallback的实现,用于回调连接状态和传输数据,具体你可以百度一下或看官方文档

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏