Android手机之间的蓝牙通信的代码和原理(1),Android开发教程

	initView();

}



public void click(View view) {

	if (transferSocket != null) {

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

		sendMessage(transferSocket, "客户端说:" + str + "\n");

	}

}



private void initView() {

	// TODO Auto-generated method stub

	bAtapter = BluetoothAdapter.getDefaultAdapter();

	mListView = (ListView) findViewById(R.id.list_id);

	mListView.setOnItemClickListener(this);

	startDiscovery();

	mListView.setAdapter(baseAdapter);

}



private void startDiscovery() {

	// TODO Auto-generated method stub

	registerReceiver(discoveryRsult, new IntentFilter(

			BluetoothDevice.ACTION_FOUND));



	deviceList.clear();

	nameList.clear();

	bAtapter.startDiscovery();



}



BroadcastReceiver discoveryRsult = new BroadcastReceiver() {



	@Override

	public void onReceive(Context arg0, Intent arg1) {

		// TODO Auto-generated method stub

		nameList.add(arg1.getStringExtra(BluetoothDevice.EXTRA_NAME));

		deviceList.add((BluetoothDevice) arg1

				.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE));

		Log.i("caohaidemo", "nameList:" + nameList.size());

		baseAdapter.notifyDataSetChanged();



	}

};

BaseAdapter baseAdapter = new BaseAdapter() {



	@Override

	public View getView(int arg0, View arg1, ViewGroup arg2) {

		arg1 = LayoutInflater.from(MainActivity.this).inflate(

				R.layout.item, arg2, false);

		TextView tv = (TextView) arg1.findViewById(R.id.item_text);

		tv.setText(nameList.get(arg0));

		return arg1;

	}



	@Override

	public long getItemId(int arg0) {

		// TODO Auto-generated method stub

		return arg0;

	}



	@Override

	public Object getItem(int arg0) {

		// TODO Auto-generated method stub

		return nameList.get(arg0);

	}



	@Override

	public int getCount() {

		// TODO Auto-generated method stub

		return nameList.size();

	}

};



@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

	// TODO Auto-generated method stub

	final BluetoothDevice device = deviceList.get(arg2);

	new Thread() {

		@Override

		public void run() {

			// TODO Auto-generated method stub



			connectToServerSocket(device,

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

		}

	}.start();



}







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

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

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

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

8 (备注Android)**
[外链图片转存中…(img-A6VKCMrE-1711918400095)]

总结

Android架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

上面分享的字节跳动公司2021年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
[外链图片转存中…(img-gk2GxuME-1711918400095)]

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

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

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值