`
zheyiw
  • 浏览: 1021495 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android蓝牙连接三部曲

阅读更多

// 连接蓝牙的线程
private class AcceptThread extends Thread {
	private final BluetoothServerSocket mmServerSocket;

	public AcceptThread() {
		BluetoothServerSocket tmp = null;
		try {
			tmp = BlueToothService.this.adapter.listenUsingRfcommWithServiceRecord("BTPrinter",
					BlueToothService.MY_UUID);
		} catch (IOException e) {
			Log.e(BlueToothService.this.TAG, "listen() failed", e);
		}
		this.mmServerSocket = tmp;
	}

	public void run() {
		if (BlueToothService.this.D.booleanValue())
			Log.d(BlueToothService.this.TAG, "BEGIN mAcceptThread" + this);
		setName("AcceptThread");
		BluetoothSocket socket = null;

		while (BlueToothService.this.mState != 3) {
			try {
				socket = this.mmServerSocket.accept();
			} catch (IOException e) {
				break;
			}

			if (socket != null)
				synchronized (BlueToothService.this) {
					switch (BlueToothService.this.mState) {
					case 1:
					case 2:
						BlueToothService.this.connected(socket, socket.getRemoteDevice());
						break;
					case 0:
					case 3:
						try {
							socket.close();
						} catch (IOException localIOException1) {
						}
					}
				}
		}
	}

	public void cancel() {
		if (BlueToothService.this.D.booleanValue())
			Log.d(BlueToothService.this.TAG, "cancel " + this);
		try {
			this.mmServerSocket.close();
		} catch (IOException e) {
			Log.e(BlueToothService.this.TAG, "close() of server failed", e);
		}
	}
}

// 连接中的线程
private class ConnectThread extends Thread {
	private final BluetoothSocket mmSocket;
	private final BluetoothDevice mmDevice;

	public ConnectThread(BluetoothDevice device) {
		this.mmDevice = device;
		BluetoothSocket tmp = null;
		try {
			tmp = device.createRfcommSocketToServiceRecord(BlueToothService.MY_UUID);
		} catch (IOException e) {
			Log.e(BlueToothService.this.TAG, "create() failed", e);
		}
		this.mmSocket = tmp;
	}

	public void run() {
		Log.i(BlueToothService.this.TAG, "BEGIN mConnectThread");
		setName("ConnectThread");

		BlueToothService.this.adapter.cancelDiscovery();
		BlueToothService.this.SetScanState(1);
		try {
			this.mmSocket.connect();
			BlueToothService.this.connectionSuccess();
		} catch (IOException e) {
			BlueToothService.this.connectionFailed();
			try {
				this.mmSocket.close();
			} catch (IOException e2) {
				Log.e(BlueToothService.this.TAG, "unable to close() socket during connection failure", e2);
			}

			BlueToothService.this.start();
			return;
		}

		synchronized (BlueToothService.this) {
			BlueToothService.this.mConnectThread = null;
		}

		BlueToothService.this.connected(this.mmSocket, this.mmDevice);
	}

	public void cancel() {
		try {
			this.mmSocket.close();
		} catch (IOException e) {
			Log.e(BlueToothService.this.TAG, "close() of connect socket failed", e);
		}
	}
}

// 连接之后的线程
private class ConnectedThread extends Thread {
	private final BluetoothSocket mmSocket;
	private final InputStream mmInStream;
	private final OutputStream mmOutStream;
	private boolean isCancle = false;

	public ConnectedThread(BluetoothSocket socket) {
		Log.d(BlueToothService.this.TAG, "create ConnectedThread");
		this.mmSocket = socket;
		InputStream tmpIn = null;
		OutputStream tmpOut = null;
		this.isCancle = false;
		try {
			tmpIn = socket.getInputStream();
			tmpOut = socket.getOutputStream();
		} catch (IOException e) {
			Log.e(BlueToothService.this.TAG, "temp sockets not created", e);
		}
		this.mmInStream = tmpIn;
		this.mmOutStream = tmpOut;
	}

	public void run() {
		Log.i(BlueToothService.this.TAG, "BEGIN mConnectedThread");
		while (!this.isCancle)
			try {
				byte[] buffer = new byte[1];

				int bytes = this.mmInStream.read(buffer);
				if (bytes > 0) {
					BlueToothService.this.SetPrinterType(2);

					if (buffer[0] != 17) {
						BlueToothService.this.SetWriteState(3);
					} else {
						BlueToothService.this.SetWriteState(2);
					}

				} else {
					Log.e(BlueToothService.this.TAG, "disconnected1");
					BlueToothService.this.connectionLost();
					this.isCancle = true;
				}

			} catch (IOException e) {
				Log.e(BlueToothService.this.TAG, "disconnected2", e);
				BlueToothService.this.connectionLost();
				this.isCancle = true;
			}
	}

	public void write(byte[] buffer) {
		try {
			this.mmOutStream.write(buffer);
			Log.i("BTPWRITE", new String(buffer, "GBK"));

			BlueToothService.this.mHandler.obtainMessage(3, -1, -1, buffer).sendToTarget();
		} catch (IOException localIOException) {
		}
	}

	public void cancel() {
		try {
			this.isCancle = true;
			this.mmSocket.close();
			Log.d(BlueToothService.this.TAG, "562cancel suc");
			BlueToothService.this.setState(1);
		} catch (IOException e) {
			Log.d(BlueToothService.this.TAG, "565cancel failed");
		}
	}
}


分享到:
评论
1 楼 518七哥 2014-11-14  
我想问下,我的代码跟你的一样,安卓手机蓝牙能连接成功蓝牙打印机,但是打印好像没反应啊,是什么原因呢,求大神指导,我的QQ1024473555,希望大神有时间指导一下,我用的打印机是LW-600P,是爱普生的一款便携蓝牙打印机,我不知道这些代码能不能通用,应该要注意什么

相关推荐

    Android蓝牙连接设备demo

    "Android蓝牙连接设备demo"是一个示例项目,它演示了如何使用Android SDK来实现BLE 4.0及更高版本的蓝牙设备连接和通信功能。下面我们将深入探讨这个demo涉及的关键知识点。 1. **BLE 4.0与Android支持**:BLE 4.0...

    java实现电脑和Android蓝牙连接

    总之,Java和Android之间的蓝牙连接是一项涉及多个API和步骤的技术,它允许设备间无线传输数据,为许多应用场景,如文件共享、设备控制等,提供了便利。通过深入研究和实践,开发者可以熟练掌握这项技术,构建出高效...

    android蓝牙连接

    在Android平台上,蓝牙连接是一项重要的功能,用于设备之间的数据传输或者设备控制。在这个主题中,我们将深入探讨如何在Android应用中实现蓝牙连接,基于提供的文件`LocalDeviceManager.java`和`...

    Android蓝牙连接源代码

    在Android平台上进行蓝牙连接开发是一项常见的任务,尤其对于构建物联网(IoT)设备或需要设备间通信的应用至关重要。本文将详细解析"Android蓝牙连接源代码"这一主题,以帮助开发者理解如何在Android应用中实现蓝牙...

    实现android手机蓝牙连接demo

    在Android平台上,开发蓝牙连接功能是一项常见的任务,尤其在物联网(IoT)设备通信和移动设备间的数据交换中。本文将深入探讨如何实现一个简单的Android蓝牙连接Demo,涵盖蓝牙连接、数据传输以及服务(Service)的使用...

    android监听蓝牙设备的连接状态

    首先,我们要明白蓝牙连接状态主要包括三种:未连接、连接中和已连接。在Android中,我们可以利用BroadcastReceiver(广播接收器)来捕获蓝牙设备的这些状态变化。广播接收器是Android系统中一个重要的组件,它能够...

    Android代码:蓝牙连接单片机LED

    Android代码:蓝牙连接51单片机LED代码

    Android蓝牙,配对,搜索,连接,通信,断开的Demo

    当需要断开蓝牙连接时,使用`BluetoothSocket.close()`方法关闭socket,同时确保在应用层清理所有相关的资源。此外,`BluetoothAdapter.disable()`可以关闭整个蓝牙适配器,但此操作需要系统的特殊权限。 6. **...

    android BlueToothDemo (蓝牙搜索,配对,连接,传输)详细讲解见博客

    - **状态监控**:通过BluetoothGattCallback监听蓝牙连接的状态变化,如连接成功、断开等。 - **适配不同Android版本**:Android的不同版本可能有不同的蓝牙API,需要根据API级别适配代码。 - **安全与隐私**:尊重...

    安卓Android源码——android蓝牙连接打印机.zip

    本文将深入探讨如何在Android源码中实现蓝牙连接打印机的功能,旨在为开发者提供详尽的指导。 首先,理解Android蓝牙连接的基础概念至关重要。Android系统支持Bluetooth API,允许应用程序发现、配对并连接到其他...

    android 8.1蓝牙配对连接、获取通讯录及通话记录

    android 8.1系统蓝牙连接,获取通讯录及通话记录、蓝牙电话等相关代码逻辑梳理

    android连接蓝牙实例

    在Android平台上实现蓝牙连接并操作蓝牙读卡器的过程涉及到多个技术环节,包括蓝牙适配器的检测、设备的扫描与连接、数据传输以及读卡命令的发送与接收。以下是对这些知识点的详细说明: 1. **蓝牙适配器的检测**:...

    android 蓝牙连接、接收数据

    在Android平台上,蓝牙连接和数据接收是移动应用开发中的一个重要组成部分,特别是在物联网(IoT)设备的交互场景中。以下是对这个主题的详细说明: ### 1. 蓝牙搜索与设备列表 首先,我们需要开启蓝牙功能并扫描周围...

    android设备连接蓝牙打印机,并实现打印功能

    这个过程涉及多个步骤和技术,包括蓝牙连接管理、数据格式转换以及与打印机的通信协议等。以下是对这一主题的详细解析: 首先,我们需要了解Android系统中的蓝牙API。Android提供了`BluetoothAdapter`类来管理和...

    android 蓝牙连接通信

    在Android平台上进行蓝牙连接通信是一项常见的任务,尤其在设备间数据传输、物联网应用以及游戏等领域。本文将深入探讨如何在Android系统中实现蓝牙匹配、建立连接以及进行数据交换。 首先,我们要了解Android中的...

    Android蓝牙连接配对通讯.zip

    在Android平台上,蓝牙连接配对和通信是一项常用的技术,它允许设备之间进行数据交换,例如在没有网络的情况下传输文件或实现物联网设备的控制。在这个"Android蓝牙连接配对通讯.zip"压缩包中,包含了实现这一功能的...

    Android 蓝牙HFP 连接、SCO连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走

    Android 蓝牙HFP 连接、SCO连接流程图(协议栈),非常详细的从btif-bta-btm-hci 数据流程走向,以及从controller收到数据到btm层,将Android 源码使用流程图的形式画了出来,使Android 蓝牙开发者更清楚数据收发...

    Android手机连接蓝牙打印机实现打印功能

    在发送数据前,通常需要确保蓝牙连接已经建立并且稳定,可以通过`connect()`方法进行连接,并监听`IOException`来处理可能出现的连接问题。 在"PrinterTest"这个文件中,可能包含了一个测试类或者测试用例,用于...

    Android 蓝牙开发,蓝牙连打印机

    在Android平台上进行蓝牙开发,尤其是实现蓝牙连接到打印机的功能,是一项技术性较强的任务。下面将详细阐述这个过程中涉及的关键知识点。 首先,理解Android蓝牙API是基础。Android提供了BluetoothAdapter类,它是...

    Android与蓝牙耳机建立连接的分析

    #### 三、蓝牙连接建立过程 **1. 主动连接** 当Android设备主动连接蓝牙耳机时,通常是在“蓝牙设置”中完成配对。此时,`BluetoothHeadsetService` 会接收到`BONDING_CREATED_ACTION`动作,随后尝试通过RFCOMM...

Global site tag (gtag.js) - Google Analytics