Android手机之间的蓝牙通信的代码和原理

本文详细描述了Android应用中使用BluetoothSocket进行蓝牙通信的过程,包括客户端建立连接、发送消息以及服务器端接收并处理消息的方法。
摘要由CSDN通过智能技术生成
private void connectToServerSocket(BluetoothDevice device, UUID uuid) {

	try {

		BluetoothSocket clientSocket = device

				.createRfcommSocketToServiceRecord(uuid);

		transferSocket = clientSocket;

		// Block until server connection accepted.

		clientSocket.connect();

		runOnUiThread(new Runnable() {



			@Override

			public void run() {

				// TODO Auto-generated method stub

				Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_LONG)

						.show();

			}

		});

		// Start listening for messages.



		listenForMessages(clientSocket, incoming);



		// Add a reference to the socket used to send messages.



	} catch (IOException e) {

		Log.e("BLUETOOTH", "Blueooth client I/O Exception", e);

	}

}



private void sendMessage(BluetoothSocket socket, String message) {

	OutputStream outStream;

	try {

		outStream = socket.getOutputStream();



		// Add a stop character.

		byte[] byteArray = (message + " ").getBytes();

		byteArray[byteArray.length - 1] = 0;



		outStream.write(byteArray);

	} catch (IOException e) {



	}

}



private boolean listening = false;



private void listenForMessages(BluetoothSocket socket,

		final StringBuilder incoming) {

	listening = true;



	int bufferSize = 1024;

	byte[] buffer = new byte[bufferSize];



	try {

		InputStream instream = socket.getInputStream();

		int bytesRead = -1;



		while (listening) {

			bytesRead = instream.read(buffer);

			if (bytesRead != -1) {

				String result = "";

				while ((bytesRead == bufferSize)

						&& (buffer[bufferSize - 1] != 0)) {

					result = result + new String(buffer, 0, bytesRead - 1);

					bytesRead = instream.read(buffer);

				}

				result = result + new String(buffer, 0, bytesRead - 1);

				incoming.append(result);

				Log.i("caohaidemo", "服务器说:" + incoming.toString());

				runOnUiThread(new Runnable() {



					@Override

					public void run() {

						// TODO Auto-generated method stub

						tv.setText(incoming.toString());

					}

				});

			}



		}

		// socket.close();

	} catch (IOException e) {



	} finally {

	}

}

}














![](https://blog.csdn.net/)  

  



2.服务端代码:



package com.example.mybloothserver;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.UUID;

import android.os.Bundle;

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothServerSocket;

import android.bluetooth.BluetoothSocket;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private EditText mEditText;

private StringBuffer sb;

private TextView tv;

private StringBuilder incoming = new StringBuilder();



@Override

protected void onCreate(Bundle savedInstanceState) {

	super.onCreate(savedInstanceState);

	setContentView(R.layout.activity_main);

	mEditText = (EditText) findViewById(R.id.et_id);

	sb = new StringBuffer();

	tv = (TextView) findViewById(R.id.tv_id);

	startServerSocket(BluetoothAdapter.getDefaultAdapter());

}



public void click(View view) {



	if (transferSocket != null) {

		String str = mEditText.getText().toString();

		sendMessage(transferSocket, "服务器说:" + str + "\n");

	}



}



private BluetoothSocket transferSocket;



private UUID startServerSocket(BluetoothAdapter bluetooth) {

	UUID uuid = UUID.fromString("a60f35f0-b93a-11de-8a39-08002009c666");

	String name = "bluetoothserver";



	try {

		final BluetoothServerSocket btserver = bluetooth

				.listenUsingRfcommWithServiceRecord(name, uuid);



		Thread acceptThread = new Thread(new Runnable() {

			public void run() {

				try {

					// Block until client connection established.

					final BluetoothSocket serverSocket = btserver.accept();

					transferSocket = serverSocket;

					runOnUiThread(new Runnable() {



						@Override

						public void run() {

							// TODO Auto-generated method stub

							Toast.makeText(MainActivity.this, "连接成功",

									Toast.LENGTH_LONG).show();

						}

					});

					// Start listening for messages.



					listenForMessages(serverSocket, incoming);

					// Add a reference to the socket used to send messages.



				} catch (IOException e) {

					Log.e("BLUETOOTH", "Server connection IO Exception", e);

				}

			}

		});

		acceptThread.start();

	} catch (IOException e) {

		Log.e("BLUETOOTH", "Socket listener IO Exception", e);

	}

	return uuid;

}



/**

 * Listing 16-8: Sending and receiving strings using Bluetooth Sockets

 */

private void sendMessage(BluetoothSocket socket, String message) {

	OutputStream outStream;

	try {

		outStream = socket.getOutputStream();



		// Add a stop character.

		byte[] byteArray = (message + " ").getBytes();

		byteArray[byteArray.length - 1] = 0;



		outStream.write(byteArray);

	} catch (IOException e) {



	}

}



private boolean listening = false;



private void listenForMessages(BluetoothSocket socket,

		final StringBuilder incoming) {

	listening = true;



	int bufferSize = 1024;

	byte[] buffer = new byte[bufferSize];



	try {

		InputStream instream = socket.getInputStream();

		int bytesRead = -1;



		while (listening) {

			bytesRead = instream.read(buffer);

			if (bytesRead != -1) {

				String result = "";

				while ((bytesRead == bufferSize)

						&& (buffer[bufferSize - 1] != 0)) {

					result = result + new String(buffer, 0, bytesRead - 1);

					bytesRead = instream.read(buffer);

				}

				result = result + new String(buffer, 0, bytesRead - 1);

				incoming.append(result);

				runOnUiThread(new Runnable() {



					@Override

					public void run() {

						// TODO Auto-generated method stub

						tv.setText(incoming.toString());

					}

				});

			}

			// socket.close();

		}

		socket.close();

	} catch (IOException e) {

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

img-5LvCl27Z-1714207968360)]

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值