蓝牙传送文件聊天消息完成完成后手机界面是怎样的

如何用蓝牙耳机在电脑上听歌和语音聊天及文件传输_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何用蓝牙耳机在电脑上听歌和语音聊天及文件传输
上传于||文档简介
&&如​何​用​蓝​牙​耳​机​在​电​脑​上​听​歌​和​语​音​聊​天​及​文​件​传​输
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢手机微信的聊天记录存在哪,可以蓝牙发送到其他手机吗_百度知道
手机微信的聊天记录存在哪,可以蓝牙发送到其他手机吗
我有更好的答案
需要载软件
我想从一部手机上传到另一部手机,再查看聊天记录,因为我没多长时间用那部手机只能先传过来
蓝牙是可以发的
蓝牙怎么发送
其他类似问题
为您推荐:
聊天记录的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁android蓝牙编程资料搜集
Android手机蓝牙实现多人即时聊天
Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。
本文档描述了怎样利用android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设备、寻找局域网内可能或者匹配的设备、连接设备和设备之间的数据传输。以下是建立蓝牙连接的所需要的一些基本类:
&&BluetoothAdapter类:代表了一个本地的蓝牙适配器。他是所有蓝牙交互的的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一&
&& && && && && && && && &个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。
&&BluetoothDevice类:代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。(其信息是封装在bluetoothsocket中)。
&&Bluetoothsocket类:代表了一个蓝牙套接字的接口(类似于tcp中的套接字),他是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。
&&Blueboothserversocket类:代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket类将会返回一个bluetoothsocket。
&&Bluetoothclass类:描述了一个蓝牙设备的一般特点和能力。他的只读属性集定义了设备的主、次设备类和一些相关服务。然而,他并没有准确的描述所有该设备所支持的蓝牙文件和服务,而是作为对设备种类来说的一个小小暗示。
下面说说具体的编程实现:&&
必须确定你的设备支持蓝牙,并保证他可以用。如果你的设备支持蓝牙,将它使能。当然,有两种方法,一种是在你的系统设置里开启蓝牙,另外一中是在你的应用程序里启动蓝牙功能,第一种方法就不讲了,具体讲一个第二种方法:
首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器bluetoothadapter,以后你就可以使用该对象了。如果返回为空,the
story is over。
Eg:BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
& & // Device does not support Bluetooth
其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用startActivityForResult()方法使能蓝牙设备,例如:
if (!mBluetoothAdapter.isEnabled()) {
& && && && & Intent enableBtIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
& & startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
至此,如不出意外,恭喜你的蓝牙设备已经开启了,接下来需要查找周边可能存在的蓝牙设备了。
查找设备:
&&使用bluetoothadapter类里的方法,你可以查找远端设备(不过蓝牙查找的范围好像是在十米以内吧)或者查询在你手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能“功能(对方设备是可以被发现的是你能够发起连接的前提条件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。
如果你是第一次与该设备连接,那么一个配对的请求就会自动的显示给用户。当设备配对好之后,他的一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API来读取。使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。
&&匹配好的设备和连接上的设备的不同点:匹配好只是说明对方设备发现了你的存在,并拥有一个共同的识别码,并且可以连接。连接上:表示当前设备共享一个RFCOMM信道并且两者之间可以交换数据。也就是是说蓝牙设备在建立RFCOMM信道之前,必须是已经配对好了的。
怎么查询匹配好的设备:
在建立连接之前你必须先查询配对好了的蓝牙设备集(你周围的蓝牙设备可能不止一个),以便你选取哪一个设备进行通信,例如你可以你可以查询所有配对的蓝牙设备,并使用一个数组适配器将其打印显示出来:
代码片段,双击复制
Set&BluetoothDevice& pairedDevices = mBluetoothAdapter.getBondedDevices();&P&&/P&
(pairedDevices.size() & 0) {
(BluetoothDevice device : pairedDevices) {
&&&& &&&mArrayAdapter.add(device.getName() +
&/n& + device.getAddress());
建立一个蓝牙连接只需要MAC地址就已经足够了。
扫描设备:
& &扫描设备,只需要简单的调用startDiscovery()方法,这个扫描的过程大概持续是12秒,应用程序为了ACTION_FOUND动作需要注册一个BroadcastReceiver来接受设备扫描到的信息。对于每一个设备,系统都会广播ACTION_FOUND动作。例如:
代码片段,双击复制
&&& public
void onReceive(Context context, Intent intent) {
&&&& &&&String action = intent.getAction();
&&&& &&&if
(BluetoothDevice.ACTION_FOUND.equals(action)) {
&&&& && && &
&&&& && && &BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
&&&& && && &
&&&& && && &mArrayAdapter.add(device.getName() +
&/n& + device.getAddress());
IntentFilter filter =
new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
注意:扫描的过程是一个很耗费资源的过程,一旦你找到你需要的设备之后,在发起连接请求之前,确保你的程序调用cancelDiscovery()方法停止扫描。显然,如果你已经连接上一个设备,启动扫描会减少你的通信带宽。
&&使能被发现:Enabling discoverability
如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent,
int)方法就可以了。他将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时间是120秒,当然你可以可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间(最大不超过300秒,这是出于对你设备上的信息安全考虑)。例如:
代码片段,双击复制
Intent discoverableIntent =
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
startActivity(discoverableIntent);
运行该段代码之后,系统会弹出一个对话框来提示你启动设备使能被发现(次过程中如果你的蓝牙功能没有开启,系统会帮你开启),并且如果你准备对该远端设备发现一个连接,你不需要开启使能设备被发现功能,以为该功能只是在你的应用程序作为服务器端的时候才需要。
连接设备:
在你的应用程序中,想建立两个蓝牙设备之间的连接,你必须实现客户端和服务器端的代码(因为任何一个设备都必须可以作为服务端或者客户端)。一个开启服务来监听,一个发起连接请求(使用服务器端设备的MAC地址)。当他们都拥有一个蓝牙套接字在同一RFECOMM信道上的时候,可以认为他们之间已经连接上了。服务端和客户端通过不同的方式或其他们的蓝牙套接字。当一个连接监听到的时候,服务端获取到蓝牙套接字。当客户可打开一个FRCOMM信道给服务器端的时候,客户端获取到蓝牙套接字。
注意:在此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞。如下图:
服务端的连接:
当你想要连接两台设备时,一个必须作为服务端(通过持有一个打开的bluetoothserversocket),目的是监听外来连接请求,当监听到以后提供一个连接上的bluetoothsocket给客户端,当客户端从bluetoothserversocket得到bluetoothsocket以后就可以销毁bluetoothserversocket,除非你还想监听更多的连接请求。
&&建立服务套接字和监听连接的基本步骤:
首先通过调用listenUsingRfcommWithServiceRecord(String,
UUID)方法来获取bluetoothserversocket对象,参数string代表了该服务的名称,UUID代表了和客户端连接的一个标识(128位格式的字符串ID,相当于pin码),UUID必须双方匹配才可以建立连接。其次调用accept()方法来监听可能到来的连接请求,当监听到以后,返回一个连接上的蓝牙套接字bluetoothsocket。最后,在监听到一个连接以后,需要调用close()方法来关闭监听程序。(一般蓝牙设备之间是点对点的传输)
注意:accept()方法不应该放在主Acitvity里面,因为他是一种阻塞调用(在没有监听到连接请求之间程序就一直停在那里)。解决方法是新建一个线程来管理。例如:
代码片段,双击复制
class AcceptThread extends
&&& private
final BluetoothServerSocket mmServerS
&&& public
AcceptThread() {
&&&& &&&BluetoothServerSocket tmp =
&&&& &&&try
&&&& && && &
&&&& && && &tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
catch (IOException e) { }
&&&& &&&mmServerSocket =
&&& public
void run() {
&&&& &&&BluetoothSocket socket =
&&&& &&&while
&&&& && && &try
&&&& && && && &
socket = mmServerSocket.accept();
&&&& && && &}
catch (IOException e) {
&&&& && && && &
&&&& && && &}
&&&& && && &
&&&& && && &if
(socket != null) {
&&&& && && && &
&&&& && && && &
manageConnectedSocket(socket);
&&&& && && && &
mmServerSocket.close();
&&&& && && && &
&&&& && && &}
&&& /** Will cancel the listening socket, and cause the thread to finish */
&&& public
void cancel() {
&&&& &&&try
&&&& && && &mmServerSocket.close();
catch (IOException e) { }
客户端的连接:
&&为了初始化一个与远端设备的连接,需要先获取代表该设备的一个bluetoothdevice对象。通过bluetoothdevice对象来获取bluetoothsocket并初始化连接:
具体步骤:
&&使用bluetoothdevice对象里的方法createRfcommSocketToServiceRecord(UUID)来获取bluetoothsocket。UUID就是匹配码。然后,调用connect()方法来。如果远端设备接收了该连接,他们将在通信过程中共享RFFCOMM信道,并且connect()方法返回。例如:
代码片段,双击复制
class ConnectThread extends
Thread {&P&&/P&& & private
final BluetoothSocket mmS
&&& private
final BluetoothDevice mmD
&&& public
ConnectThread(BluetoothDevice device) {
&&&& &&&BluetoothSocket tmp =
&&&& &&&mmDevice =
&&&& &&&try
&&&& && && &
&&&& && && &tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
catch (IOException e) { }
&&&& &&&mmSocket =
&&& public
void run() {
&&&& &&&mAdapter.cancelDiscovery();
&&&& &&&try
&&&& && && &
&&&& && && &
&&&& && && &mmSocket.connect();
catch (IOException connectException) {
&&&& && && &
&&&& && && &try
&&&& && && && &
mmSocket.close();
&&&& && && &}
catch (IOException closeException) { }
&&&& && && &return;
&&&& &&&manageConnectedSocket(mmSocket);
&&& /** Will cancel an in-progress connection, and close the socket */
&&& public
void cancel() {
&&&& &&&try
&&&& && && &mmSocket.close();
catch (IOException e) { }
注意:conncet()方法也是阻塞调用,一般建立一个独立的线程中来调用该方法。在设备discover过程中不应该发起连接connect(),这样会明显减慢速度以至于连接失败。且数据传输完成只有调用close()方法来关闭连接,这样可以节省系统内部资源。
管理连接(主要涉及数据的传输):
当设备连接上以后,每个设备都拥有各自的bluetoothsocket。现在你就可以实现设备之间数据的共享了。
1.&&首先通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过调用[url=file:///F:/ThunderLoad/android-sdk-windows/docs/reference/java/io/InputStream.html#read(byte[])]read(byte[])[/url]
和 [url=file:///F:/ThunderLoad/android-sdk-windows/docs/reference/java/io/OutputStream.html#write(byte[])]write(byte[])[/url].方法来读取或者写数据。
2.&&实现细节:以为读取和写操作都是阻塞调用,需要建立一个专用现成来管理。
代码片段,双击复制
&&& private
class ConnectedThread
extends Thread {
&&& private
final BluetoothSocket mmS
&&& private
final InputStream mmInS
&&& private
final OutputStream mmOutS
&&& public
ConnectedThread(BluetoothSocket socket) {
&&&& &&&mmSocket =
&&&& &&&InputStream tmpIn =
&&&& &&&OutputStream tmpOut =
&&&& &&&try
&&&& && && &tmpIn = socket.getInputStream();
&&&& && && &tmpOut = socket.getOutputStream();
catch (IOException e) { }
&&&& &&&mmInStream = tmpIn;
&&&& &&&mmOutStream = tmpO
&&& public
void run() {
&&&& &&&byte[] buffer =
new byte[1024];&&
&&&& &&&int
&&&& &&&while
&&&& && && &try
&&&& && && && &
&&&& && && && &
bytes = mmInStream.read(buffer);
&&&& && && && &
&&&& && && && &
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
&&&& && && && && && && &.sendToTarget();
&&&& && && &}
catch (IOException e) {
&&&& && && && &
&&&& && && &}
&&&& && && &
&&& public
void cancel() {
&&&& &&&try
&&&& && && &mmSocket.close();
catch (IOException e) { }
http://blog.csdn.net/pwei007/article/details/6015907
android平台蓝牙编程
19:56 2321人阅读 评论(1)
Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。
本文档描述了怎样利用android平台提供的蓝牙API去实现蓝牙设备之间的通信,蓝牙设备之间的通信主要包括了四个步骤:设置蓝牙设备、寻找局域网内可能或者匹配的设备、连接设备和设备之间的数据传输。以下是建立蓝牙连接的所需要的一些基本类:
BluetoothAdapter类:代表了一个本地的蓝牙适配器。他是所有蓝牙交互的的入口点。利用它你可以发现其他蓝牙设备,查询绑定了的设备,使用已知的MAC地址实例化一个蓝牙设备和建立一个BluetoothServerSocket(作为服务器端)来监听来自其他设备的连接。
& BluetoothDevice类:代表了一个远端的蓝牙设备,使用它请求远端蓝牙设备连接或者获取远端蓝牙设备的名称、地址、种类和绑定状态。(其信息是封装在bluetoothsocket中)。
& Bluetoothsocket类:代表了一个蓝牙套接字的接口(类似于tcp中的套接字),他是应用程序通过输入、输出流与其他蓝牙设备通信的连接点。
& Blueboothserversocket类:代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。当远端设备发起连接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket类将会返回一个bluetoothsocket。
& Bluetoothclass类:描述了一个蓝牙设备的一般特点和能力。他的只读属性集定义了设备的主、次设备类和一些相关服务。然而,他并没有准确的描述所有该设备所支持的蓝牙文件和服务,而是作为对设备种类来说的一个小小暗示。
下面说说具体的编程实现:
必须确定你的设备支持蓝牙,并保证他可以用。如果你的设备支持蓝牙,将它使能。当然,有两种方法,一种是在你的系统设置里开启蓝牙,另外一中是在你的应用程序里启动蓝牙功能,第一种方法就不讲了,具体讲一个第二种方法:
&首先通过调用静态方法getDefaultAdapter()获取蓝牙适配器bluetoothadapter,以后你就可以使用该对象了。如果返回为空,the
story is over。
&Eg:BluetoothAdapter mBluetoothAdapter
=BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter
& & // Device does not support Bluetooth
其次,调用isEnabled()来查询当前蓝牙设备的状态,如果返回为false,则表示蓝牙设备没有开启,接下来你需要封装一个ACTION_REQUEST_ENABLE请求到intent里面,调用startActivityForResult()方法使能蓝牙设备,例如:
(!mBluetoothAdapter.isEnabled())
&&&&&&&&&&&& Intent enableBtIntent
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
& & startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
至此,如不出意外,恭喜你的蓝牙设备已经开启了,接下来需要查找周边可能存在的蓝牙设备了。
查找设备:
& 使用bluetoothadapter类里的方法,你可以查找远端设备(不过蓝牙查找的范围好像是在十米以内吧)或者查询在你手机上已经匹配(或者说绑定)的其他手机了。当然需要确定对方蓝牙设备已经开启或者已经开启了“被发现使能“功能(对方设备是可以被发现的是你能够发起连接的前提条件)。如果该设备是可以被发现的,会反馈回来一些对方的设备信息,比如名字、MAC地址等,利用这些信息,你的设备就可以选择去向对方初始化一个连接。
如果你是第一次与该设备连接,那么一个配对的请求就会自动的显示给用户。当设备配对好之后,他的一些基本信息(主要是名字和MAC)被保存下来并可以使用蓝牙的API来读取。使用已知的MAC地址就可以对远端的蓝牙设备发起连接请求。
& 匹配好的设备和连接上的设备的不同点:匹配好只是说明对方设备发现了你的存在,并拥有一个共同的识别码,并且可以连接。连接上:表示当前设备共享一个RFCOMM信道并且两者之间可以交换数据。也就是是说蓝牙设备在建立RFCOMM信道之前,必须是已经配对好了的。
&怎么查询匹配好的设备:
&在建立连接之前你必须先查询配对好了的蓝牙设备集(你周围的蓝牙设备可能不止一个),以便你选取哪一个设备进行通信,例如你可以你可以查询所有配对的蓝牙设备,并使用一个数组适配器将其打印显示出来:
& Set&BluetoothDevice& pairedDevices
= mBluetoothAdapter.getBondedDevices();
// If there are paired devices
(pairedDevices.size()
& & // Loop through paired devices
(BluetoothDevice device
: pairedDevices)
& & & & // Add the name and address to an array adapter to show in a ListView
& & & & mArrayAdapter.add(device.getName()
+ &/n&
+ device.getAddress());
建立一个蓝牙连接只需要MAC地址就已经足够了。
扫描设备:
&& 扫描设备,只需要简单的调用startDiscovery()方法,这个扫描的过程大概持续是12秒,应用程序为了ACTION_FOUND动作需要注册一个BroadcastReceiver来接受设备扫描到的信息。对于每一个设备,系统都会广播ACTION_FOUND动作。例如:
&& // Create a BroadcastReceiver for ACTION_FOUND
final BroadcastReceiver mReceiver
= new BroadcastReceiver()
& & public
void onReceive(Context context,
Intent intent)
& & & & String action
= intent.getAction();
& & & & // When discovery finds a device
& & & & if
(BluetoothDevice.ACTION_FOUND.equals(action))
& & & & & & // Get the BluetoothDevice object from the Intent
& & & & & & BluetoothDevice device
= intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
& & & & & & // Add the name and address to an array adapter to show in a ListView
& & & & & & mArrayAdapter.add(device.getName()
+ &/n&
+ device.getAddress());
// Register the BroadcastReceiver
IntentFilter filter
IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
// Don't forget to unregister during onDestroy
注意:扫描的过程是一个很耗费资源的过程,一旦你找到你需要的设备之后,在发起连接请求之前,确保你的程序调用cancelDiscovery()方法停止扫描。显然,如果你已经连接上一个设备,启动扫描会减少你的通信带宽。
& 使能被发现:Enabling discoverability
& 如果你想使你的设备能够被其他设备发现,将ACTION_REQUEST_DISCOVERABLE动作封装在intent中并调用startActivityForResult(Intent,
int)方法就可以了。他将在不使你应用程序退出的情况下使你的设备能够被发现。缺省情况下的使能时间是120秒,当然你可以可以通过添加EXTRA_DISCOVERABLE_DURATION字段来改变使能时间(最大不超过300秒,这是出于对你设备上的信息安全考虑)。例如:
Intent discoverableIntent
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
startActivity(discoverableIntent);
运行该段代码之后,系统会弹出一个对话框来提示你启动设备使能被发现(次过程中如果你的蓝牙功能没有开启,系统会帮你开启),并且如果你准备对该远端设备发现一个连接,你不需要开启使能设备被发现功能,以为该功能只是在你的应用程序作为服务器端的时候才需要。
连接设备:
& 在你的应用程序中,想建立两个蓝牙设备之间的连接,你必须实现客户端和服务器端的代码(因为任何一个设备都必须可以作为服务端或者客户端)。一个开启服务来监听,一个发起连接请求(使用服务器端设备的MAC地址)。当他们都拥有一个蓝牙套接字在同一RFECOMM信道上的时候,可以认为他们之间已经连接上了。服务端和客户端通过不同的方式或其他们的蓝牙套接字。当一个连接监听到的时候,服务端获取到蓝牙套接字。当客户可打开一个FRCOMM信道给服务器端的时候,客户端获取到蓝牙套接字。
&注意:在此过程中,如果两个蓝牙设备还没有配对好的,android系统会通过一个通知或者对话框的形式来通知用户。RFCOMM连接请求会在用户选择之前阻塞。如下图:
服务端的连接:
&当你想要连接两台设备时,一个必须作为服务端(通过持有一个打开的bluetoothserversocket),目的是监听外来连接请求,当监听到以后提供一个连接上的bluetoothsocket给客户端,当客户端从bluetoothserversocket得到bluetoothsocket以后就可以销毁bluetoothserversocket,除非你还想监听更多的连接请求。
& 建立服务套接字和监听连接的基本步骤:
&首先通过调用listenUsingRfcommWithServiceRecord(String,
UUID)方法来获取bluetoothserversocket对象,参数string代表了该服务的名称,UUID代表了和客户端连接的一个标识(128位格式的字符串ID,相当于pin码),UUID必须双方匹配才可以建立连接。其次调用accept()方法来监听可能到来的连接请求,当监听到以后,返回一个连接上的蓝牙套接字bluetoothsocket。最后,在监听到一个连接以后,需要调用close()方法来关闭监听程序。(一般蓝牙设备之间是点对点的传输)
注意:accept()方法不应该放在主Acitvity里面,因为他是一种阻塞调用(在没有监听到连接请求之间程序就一直停在那里)。解决方法是新建一个线程来管理。例如:
class AcceptThread
extends Thread
& & private
final BluetoothServerSocket mmServerSocket;
& & public
AcceptThread()
& & & & // Use a temporary object that is later assigned to mmServerSocket,
& & & & // because mmServerSocket is final
& & & & BluetoothServerSocket tmp
& & & & try
& & & & & & // MY_UUID is the app's UUID string, also used by the client code
& & & & & & tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME,
catch (IOException e)
& & & & mmServerSocket = tmp;
& & public
void run()
& & & & BluetoothSocket socket
& & & & // Keep listening until exception occurs or a socket is returned
& & & & while
& & & & & & try
& & & & & & & & socket = mmServerSocket.accept();
& & & & & & }
catch (IOException e)
& & & & & & & & break;
& & & & & & }
& & & & & & // If a connection was accepted
& & & & & & if
(socket !=
& & & & & & & & // Do work to manage the connection (in a separate thread)
& & & & & & & & manageConnectedSocket(socket);
& & & & & & & & mmServerSocket.close();
& & & & & & & & break;
& & & & & & }
& & /** Will cancel the listening socket, and cause the thread to finish */
& & public
void cancel()
& & & & try
& & & & & & mmServerSocket.close();
catch (IOException e)
客户端的连接:
& 为了初始化一个与远端设备的连接,需要先获取代表该设备的一个bluetoothdevice对象。通过bluetoothdevice对象来获取bluetoothsocket并初始化连接:
&具体步骤:
& 使用bluetoothdevice对象里的方法createRfcommSocketToServiceRecord(UUID)来获取bluetoothsocket。UUID就是匹配码。然后,调用connect()方法来。如果远端设备接收了该连接,他们将在通信过程中共享RFFCOMM信道,并且connect()方法返回。例如:
class ConnectThread
extends Thread
& & private
final BluetoothSocket mmSocket;
& & private
final BluetoothDevice mmDevice;
& & public
ConnectThread(BluetoothDevice device)
& & & & // Use a temporary object that is later assigned to mmSocket,
& & & & // because mmSocket is final
& & & & BluetoothSocket tmp
& & & & mmDevice = device;
& & & & // Get a BluetoothSocket to connect with the given BluetoothDevice
& & & & try
& & & & & & // MY_UUID is the app's UUID string, also used by the server code
& & & & & & tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
catch (IOException e)
& & & & mmSocket = tmp;
& & public
void run()
& & & & // Cancel discovery because it will slow down the connection
& & & & mAdapter.cancelDiscovery();
& & & & try
& & & & & & // Connect the device through the socket. This will block
& & & & & & // until it succeeds or throws an exception
& & & & & & mmSocket.connect();
catch (IOException connectException)
& & & & & & // U close the socket and get out
& & & & & & try
& & & & & & & & mmSocket.close();
& & & & & & }
catch (IOException closeException)
& & & & & & return;
& & & & // Do work to manage the connection (in a separate thread)
& & & & manageConnectedSocket(mmSocket);
& & /** Will cancel an in-progress connection, and close the socket */
& & public
void cancel()
& & & & try
& & & & & & mmSocket.close();
catch (IOException e)
&注意:conncet()方法也是阻塞调用,一般建立一个独立的线程中来调用该方法。在设备discover过程中不应该发起连接connect(),这样会明显减慢速度以至于连接失败。且数据传输完成只有调用close()方法来关闭连接,这样可以节省系统内部资源。
管理连接(主要涉及数据的传输):
&当设备连接上以后,每个设备都拥有各自的bluetoothsocket。现在你就可以实现设备之间数据的共享了。
1.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&首先通过调用getInputStream()和getOutputStream()方法来获取输入输出流。然后通过调用read(byte[])和write(byte[]).方法来读取或者写数据。
2.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&实现细节:以为读取和写操作都是阻塞调用,需要建立一个专用现成来管理。
3.&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
class ConnectedThread
extends Thread
& & private
final BluetoothSocket mmSocket;
& & private
final InputStream mmInStream;
& & private
final OutputStream mmOutStream;
& & public
ConnectedThread(BluetoothSocket socket)
& & & & mmSocket = socket;
& & & & InputStream tmpIn
& & & & OutputStream tmpOut
& & & & // Get the input and output streams, using temp objects because
& & & & // member streams are final
& & & & try
& & & & & & tmpIn = socket.getInputStream();
& & & & & & tmpOut = socket.getOutputStream();
catch (IOException e)
& & & & mmInStream = tmpIn;
& & & & mmOutStream = tmpOut;
& & public
void run()
& & & & byte[] buffer
byte[1024]; &// buffer store for the stream
& & & & int bytes;
// bytes returned from read()
& & & & // Keep listening to the InputStream until an exception occurs
& & & & while
& & & & & & try
& & & & & & & & // Read from the InputStream
& & & & & & & & bytes = mmInStream.read(buffer);
& & & & & & & & // Send the obtained bytes to the UI Activity
& & & & & & & & mHandler.obtainMessage(MESSAGE_READ, bytes,
-1, buffer)
& & & & & & & & & & & & .sendToTarget();
& & & & & & }
catch (IOException e)
& & & & & & & & break;
& & & & & & }
& & /* Call this from the main Activity to send data to the remote device */
& & public
void write(byte[] bytes)
& & & & try
& & & & & & mmOutStream.write(bytes);
catch (IOException e)
& & /* Call this from the main Activity to shutdown the connection */
& & public
void cancel()
& & & & try
& & & & & & mmSocket.close();
catch (IOException e)
Android手机蓝牙实现多人即时聊天
Android蓝牙开发
Android手机蓝牙实现多人聊天,基本原理是一台手机蓝牙作为服务器,其他手机蓝牙作为客户端。客户端与服务器配对好后,服务器分别建立连接,实现通信。
服务器最多能实现一对七个客户端。目前我实现了一对二的即时聊天。
/blog/1013013
首先看下效果图:
服务器端:
服务器手机型号:htc G12
客户端手机型号:左设备:htc G13;右设备:天语W606
*************************************************************************************************************************************
什么是蓝牙?
蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。
蓝牙这个名称来自于第十世纪的一位丹麦国王 Harald Blatand , Blatand 在英文里的意思可以被解释为 Bluetooth( 蓝牙 )。因为国王喜欢吃蓝梅,牙龈每天都是蓝色的所以叫蓝牙。现取其“统一”的含义,用来命名意在统一无线局域网通讯标准的蓝牙技术。
蓝牙的创始人是瑞典爱立信公司,爱立信早在1994年就已进行研发。1997年,爱立信与其他设备生产商联系,并激发了他们对该项技术的浓厚兴趣。 1998年2月,5个跨国大公司,包括爱立信、诺基亚、IBM、东芝及Intel组成了一个特殊兴趣小组(SIG),他们共同的目标是建立一个全球性的小范围无线通信技术,即现在的蓝牙。
  而蓝牙这个标志的设计:它取自 Harald Bluetooth 名字中的「H」和「B」两 个字母,用古北欧字母来表示,将这两者结合起来,就成为了蓝牙的 logo(见图)。
手机蓝牙各类服务对应的UUID
Android蓝牙开发
原文链接: /group/topic//
ServiceDiscoveryServerServiceClassID_UUID = '{0-805F9B34FB}'
BrowseGroupDescriptorServiceClassID_UUID = '{0-805F9B34FB}'
PublicBrowseGroupServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙串口服务
SerialPortServiceClass_UUID = '{0-805F9B34FB}'
LANAccessUsingPPPServiceClass_UUID = '{0-805F9B34FB}'
#拨号网络服务
DialupNetworkingServiceClass_UUID = '{0-805F9B34FB}'
#信息同步服务
IrMCSyncServiceClass_UUID = '{0-805F9B34FB}'
SDP_OBEXObjectPushServiceClass_UUID = '{0-805F9B34FB}'
#文件传输服务
OBEXFileTransferServiceClass_UUID = '{0-805F9B34FB}'
IrMCSyncCommandServiceClass_UUID = '{0-805F9B34FB}'
SDP_HeadsetServiceClass_UUID = '{0-805F9B34FB}'
CordlessTelephonyServiceClass_UUID = '{0-805F9B34FB}'
SDP_AudioSourceServiceClass_UUID = '{00-805F9B34FB}'
SDP_AudioSinkServiceClass_UUID = '{00-805F9B34FB}'
SDP_AVRemoteControlTargetServiceClass_UUID = '{00-805F9B34FB}'
SDP_AdvancedAudioDistributionServiceClass_UUID = '{00-805F9B34FB}'
SDP_AVRemoteControlServiceClass_UUID = '{00-805F9B34FB}'
VideoConferencingServiceClass_UUID = '{00-805F9B34FB}'
IntercomServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙传真服务
FaxServiceClass_UUID = '{0-805F9B34FB}'
HeadsetAudioGatewayServiceClass_UUID = '{0-805F9B34FB}'
WAPServiceClass_UUID = '{0-805F9B34FB}'
WAPClientServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
PANUServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
NAPServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
GNServiceClass_UUID = '{0-805F9B34FB}'
DirectPrintingServiceClass_UUID = '{0-805F9B34FB}'
ReferencePrintingServiceClass_UUID = '{0-805F9B34FB}'
ImagingServiceClass_UUID = '{00-805F9B34FB}'
ImagingResponderServiceClass_UUID = '{00-805F9B34FB}'
ImagingAutomaticArchiveServiceClass_UUID = '{00-805F9B34FB}'
ImagingReferenceObjectsServiceClass_UUID = '{00-805F9B34FB}'
SDP_HandsfreeServiceClass_UUID = '{00-805F9B34FB}'
HandsfreeAudioGatewayServiceClass_UUID = '{00-805F9B34FB}'
DirectPrintingReferenceObjectsServiceClass_UUID = '{0-805F9B34FB}'
ReflectedUIServiceClass_UUID = '{0-805F9B34FB}'
BasicPringingServiceClass_UUID = '{0-805F9B34FB}'
PrintingStatusServiceClass_UUID = '{0-805F9B34FB}'
#人机输入服务
HumanInterfaceDeviceServiceClass_UUID = '{0-805F9B34FB}'
HardcopyCableReplacementServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙打印服务
HCRPrintServiceClass_UUID = '{0-805F9B34FB}'
HCRScanServiceClass_UUID = '{0-805F9B34FB}'
CommonISDNAccessServiceClass_UUID = '{0-805F9B34FB}'
VideoConferencingGWServiceClass_UUID = '{0-805F9B34FB}'
UDIMTServiceClass_UUID = '{00-805F9B34FB}'
UDITAServiceClass_UUID = '{00-805F9B34FB}'
AudioVideoServiceClass_UUID = '{00-805F9B34FB}'
SIMAccessServiceClass_UUID = '{00-805F9B34FB}'
PnPInformationServiceClass_UUID = '{0-805F9B34FB}'
GenericNetworkingServiceClass_UUID = '{0-805F9B34FB}'
GenericFileTransferServiceClass_UUID = '{0-805F9B34FB}'
GenericAudioServiceClass_UUID = '{0-805F9B34FB}'
GenericTelephonyServiceClass_UUID = '{0-805F9B34FB}'&
Android手机蓝牙实现多人聊天,基本原理是一台手机蓝牙作为服务器,其他手机蓝牙作为客户端。客户端与服务器配对好后,服务器分别建立连接,实现通信。
服务器最多能实现一对七个客户端。目前我实现了一对二的即时聊天。
/blog/1013013
首先看下效果图:
服务器端:
服务器手机型号:htc G12
客户端手机型号:左设备:htc G13;右设备:天语W606
*************************************************************************************************************************************
什么是蓝牙?
蓝牙,是一种支持设备短距离通信(一般10m内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。
蓝牙这个名称来自于第十世纪的一位丹麦国王 Harald Blatand , Blatand 在英文里的意思可以被解释为 Bluetooth( 蓝牙 )。因为国王喜欢吃蓝梅,牙龈每天都是蓝色的所以叫蓝牙。现取其“统一”的含义,用来命名意在统一无线局域网通讯标准的蓝牙技术。
蓝牙的创始人是瑞典爱立信公司,爱立信早在1994年就已进行研发。1997年,爱立信与其他设备生产商联系,并激发了他们对该项技术的浓厚兴趣。 1998年2月,5个跨国大公司,包括爱立信、诺基亚、IBM、东芝及Intel组成了一个特殊兴趣小组(SIG),他们共同的目标是建立一个全球性的小范围无线通信技术,即现在的蓝牙。
  而蓝牙这个标志的设计:它取自 Harald Bluetooth 名字中的「H」和「B」两 个字母,用古北欧字母来表示,将这两者结合起来,就成为了蓝牙的 logo(见图)。
原文链接: /group/topic//
ServiceDiscoveryServerServiceClassID_UUID = '{0-805F9B34FB}'
BrowseGroupDescriptorServiceClassID_UUID = '{0-805F9B34FB}'
PublicBrowseGroupServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙串口服务
SerialPortServiceClass_UUID = '{0-805F9B34FB}'
LANAccessUsingPPPServiceClass_UUID = '{0-805F9B34FB}'
#拨号网络服务
DialupNetworkingServiceClass_UUID = '{0-805F9B34FB}'
#信息同步服务
IrMCSyncServiceClass_UUID = '{0-805F9B34FB}'
SDP_OBEXObjectPushServiceClass_UUID = '{0-805F9B34FB}'
#文件传输服务
OBEXFileTransferServiceClass_UUID = '{0-805F9B34FB}'
IrMCSyncCommandServiceClass_UUID = '{0-805F9B34FB}'
SDP_HeadsetServiceClass_UUID = '{0-805F9B34FB}'
CordlessTelephonyServiceClass_UUID = '{0-805F9B34FB}'
SDP_AudioSourceServiceClass_UUID = '{00-805F9B34FB}'
SDP_AudioSinkServiceClass_UUID = '{00-805F9B34FB}'
SDP_AVRemoteControlTargetServiceClass_UUID = '{00-805F9B34FB}'
SDP_AdvancedAudioDistributionServiceClass_UUID = '{00-805F9B34FB}'
SDP_AVRemoteControlServiceClass_UUID = '{00-805F9B34FB}'
VideoConferencingServiceClass_UUID = '{00-805F9B34FB}'
IntercomServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙传真服务
FaxServiceClass_UUID = '{0-805F9B34FB}'
HeadsetAudioGatewayServiceClass_UUID = '{0-805F9B34FB}'
WAPServiceClass_UUID = '{0-805F9B34FB}'
WAPClientServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
PANUServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
NAPServiceClass_UUID = '{0-805F9B34FB}'
#个人局域网服务
GNServiceClass_UUID = '{0-805F9B34FB}'
DirectPrintingServiceClass_UUID = '{0-805F9B34FB}'
ReferencePrintingServiceClass_UUID = '{0-805F9B34FB}'
ImagingServiceClass_UUID = '{00-805F9B34FB}'
ImagingResponderServiceClass_UUID = '{00-805F9B34FB}'
ImagingAutomaticArchiveServiceClass_UUID = '{00-805F9B34FB}'
ImagingReferenceObjectsServiceClass_UUID = '{00-805F9B34FB}'
SDP_HandsfreeServiceClass_UUID = '{00-805F9B34FB}'
HandsfreeAudioGatewayServiceClass_UUID = '{00-805F9B34FB}'
DirectPrintingReferenceObjectsServiceClass_UUID = '{0-805F9B34FB}'
ReflectedUIServiceClass_UUID = '{0-805F9B34FB}'
BasicPringingServiceClass_UUID = '{0-805F9B34FB}'
PrintingStatusServiceClass_UUID = '{0-805F9B34FB}'
#人机输入服务
HumanInterfaceDeviceServiceClass_UUID = '{0-805F9B34FB}'
HardcopyCableReplacementServiceClass_UUID = '{0-805F9B34FB}'
#蓝牙打印服务
HCRPrintServiceClass_UUID = '{0-805F9B34FB}'
HCRScanServiceClass_UUID = '{0-805F9B34FB}'
CommonISDNAccessServiceClass_UUID = '{0-805F9B34FB}'
VideoConferencingGWServiceClass_UUID = '{0-805F9B34FB}'
UDIMTServiceClass_UUID = '{00-805F9B34FB}'
UDITAServiceClass_UUID = '{00-805F9B34FB}'
AudioVideoServiceClass_UUID = '{00-805F9B34FB}'
SIMAccessServiceClass_UUID = '{00-805F9B34FB}'
PnPInformationServiceClass_UUID = '{0-805F9B34FB}'
GenericNetworkingServiceClass_UUID = '{0-805F9B34FB}'
GenericFileTransferServiceClass_UUID = '{0-805F9B34FB}'
GenericAudioServiceClass_UUID = '{0-805F9B34FB}'
GenericTelephonyServiceClass_UUID = '{0-805F9B34FB}'&
文章评论 以下网友留言只代表其个人观点,不代表本网站的观点和立场。

我要回帖

更多关于 用蓝牙传送文件 的文章

 

随机推荐