http://www.eoeandroid.com/thread-18993-1-1.htmlhtml
对于通常的软件开发人员来讲,蓝牙是不多用到的,尤为是Android的蓝牙开发,国内的例子不多 Android对于蓝牙开发从2.0版本的sdk才开始支持,并且模拟器不支持,测试至少须要两部手机,因此制约了不少技术人员的开发,刚巧这段时间公司有蓝牙开发的需求,我看了不少国内、国外的资料,又研究了一下J2ME的蓝牙开发(为了找找思路),虽然我想要的功能还没实现(我曾经在不少论坛里问了不少遍,苦于没有高人解答..),我要实现的功能是链接一个硬件设备,凡是跟硬件沾上边的,都让软件人员开发头疼..android
好了,废话不说了,鉴于不少开发人员如今也有蓝牙开发的需求,也为了你们少走些弯路,先将我积攒的一点点在Android蓝牙开发经验与你们分享一下!api
首先,要操做蓝牙,先要在AndroidManifest.xml里加入权限服务器
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />测试
<uses-permissionandroid:name="android.permission.BLUETOOTH" />ui
而后,看下api,Android全部关于蓝牙开发的类都在android.bluetooth包下,以下图,只有8个类spa
而咱们须要用到了就只有几个而已:线程
1.BluetoothAdapter 顾名思义,蓝牙适配器,直到咱们创建bluetoothSocket链接以前,都要不断操做它翻译
BluetoothAdapter里的方法不少,经常使用的有如下几个:调试
cancelDiscovery() 根据字面意思,是取消发现,也就是说当咱们正在搜索设备的时候调用这个方法将再也不继续搜索
disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候咱们须要问下用户是否打开,一下这两行代码一样是打开蓝牙,不过会提示用户:
Intemtenabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
getAddress()获取本地蓝牙地址
getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter
getName()获取本地蓝牙名称
getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备
getState()获取本地蓝牙适配器当前状态(感受可能调试的时候更须要)
isDiscovering()判断当前是否正在查找设备,是返回true
isEnabled()判断蓝牙是否打开,已打开返回true,不然,返回false
listenUsingRfcommWithServiceRecord(String name,UUID uuid)根据名称,UUID建立并返回BluetoothServerSocket,这是建立BluetoothSocket服务器端的第一步
startDiscovery()开始搜索,这是搜索的第一步
2.BluetoothDevice看名字就知道,这个类描述了一个蓝牙设备
createRfcommSocketToServiceRecord(UUIDuuid)根据UUID建立并返回一个BluetoothSocket
这个方法也是咱们获取BluetoothDevice的目的——建立BluetoothSocket
这个类其余的方法,如getAddress(),getName(),同BluetoothAdapter
3.BluetoothServerSocket若是去除了Bluetooth相信你们必定再熟悉不过了,既然是Socket,方法就应该都差很少,
这个类一种只有三个方法
两个重载的accept(),accept(inttimeout)二者的区别在于后面的方法指定了过期时间,须要注意的是,执行这两个方法的时候,直到接收到了客户端的请求(或是过时以后),都会阻塞线程,应该放在新线程里运行!
还有一点须要注意的是,这两个方法都返回一个BluetoothSocket,最后的链接也是服务器端与客户端的两个BluetoothSocket的链接
close()这个就不用说了吧,翻译一下——关闭!
4.BluetoothSocket,跟BluetoothServerSocket相对,是客户端
一共5个方法,不出意外,都会用到
close(),关闭
connect()链接
getInptuStream()获取输入流
getOutputStream()获取输出流
getRemoteDevice()获取远程设备,这里指的是获取bluetoothSocket指定链接的那个远程蓝牙设备