Android从2.0开始包含了完整的蓝牙组件,有关Android平台上的bluetooth控制常见的运行在API Level至少为5的代码如下: private BluetoothAdapter mAdapter = null; 开启蓝牙 if (!mAdapter.isEnabled()) { Intent cwj = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(cwj); } 设置可发现状态 Intent android123 = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); android123.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 500); //Android开发网提示这里为设置搜索超时500ms startActivity(android123); 本例使用的是Google推荐的通过Intent和Action方式调用系统的蓝牙宿主程序来控制蓝牙的开关,无需permission也可以很好的处理,希望未来Google应该在GPS控制上也提供类似的方法
蓝牙

Android蓝牙API之BluetoothAdapter类(2) Android开发技术
从Android 2.0开始提供最全面的蓝牙开发接口,API Level为5的系统才能调用,目前Android Bluetooth API包含了主要以下几类:BluetoothAdapter BluetoothDevice、BluetoothSocket 、BluetoothServerSocket 和BluetoothClass 它们均在android.bluetooth这个包中出现。 我们调用时除了需要考虑API Level至少为5外,还需注意添加相应的权限,比如使用通讯需要在androidmanifest.xml加入<uses-permission android:name="android.permission.BLUETOOTH" />,而开关蓝牙需要android.permission.BLUETOOTH_ADMIN权限。 三、建立通讯 establishing 对于建立一个蓝牙通讯,必须经过以下四个步骤:获取本地蓝牙设备、查找远程设备、配对(已配对设备将会忽略这步的细节)、连接设备和传输数据. 在Android平台中首先我们需要查找本地活动的蓝牙适配器,通过BluetoothAdapter类的getDefaultAdapter() 方法获得一个系统默认可用的蓝牙设备,示例代码如下 BluetoothAdapter cwjBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (cwjBluetoothAdapter == null) { // Android开发网提示大家本机没有找到蓝牙硬件或驱动存在问题 } 当然有了这步仍然不能建立连接,因为我们还不知道手机中的蓝牙功能是否被开启,可以通过cwjBluetoothAdapter的.isEnabled方法来判断,如果没有开启,我们可以通过下面的代码提醒用户启用: if (!cwjBluetoothAdapter.isEnabled()) { Intent TurnOnBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(TurnOnBtIntent, REQUEST_ENABLE_BT);}这时用户会收到类似下面的窗口: 我们通过startActivityForResult()方法发起的Intent将会在onActivityResult()回调方法中获取用户的选择,比如用户单击了Yes开启,那么将会收到RESULT_OK 的结果,如果RESULT_CANCELED则代表用户不愿意开启蓝牙,当然android123提醒大家还可以通过其他方式来开启,比如说用BluetoothDevice获取蓝牙服务接口对象,是用enable()方法来开启,无需询问用户,这时就需要用到android.permission.BLUETOOTH_ADMIN权限。 如何判断系统蓝牙的状态呢? 建立BroadcastReceiver对象,接收ACTION_STATE_CHANGED动作,在EXTRA_STATE和EXTRA_PREVIOUS_STATE包含了现在状态和过去的状态,最终的结果定义是STATE_TURNING_ON正在开启, STATE_ON已经开启, STATE_TURNING_OFF正在关闭和 STATE_OFF已经关闭,如果有什么不明白的可以在我们的论坛中交流。 […]
Android蓝牙API之BluetoothSocket类 Android开发技术
前面两篇文章中我们提到了有关Android平台蓝牙的配对、发现、启用等操作,本文开始通过BluetoothSocket类建立有关蓝牙通讯的套接字。从Android 2.0开始支持这一特性,蓝牙和LAN一样通过MAC地址来识别远程设备,建立完通讯连接RFCOMM通道后以输入、输出流方式通讯。 一、连接设备 蓝牙通讯分为server服务器端和client客户端,它们之间使用BluetoothSocket 类的不同方法来获取数据, 1. 作为服务器 如果一个设备需要和两个或多个设备连接时,就需要作为一个server来传输,在android中提供了BluetoothServerSocket类来处理用户发来的信息,服务器端套接字在接受(accepted) 一个客户发来的BluetoothSocket时作出相应的响应。示例代码如下: private class AcceptThread extends Thread { private final BluetoothServerSocket cwjServerSocket; public AcceptThread() { BluetoothServerSocket tmp = null; //使用一个临时对象代替,因为cwjServerSocket定义为final try { tmp = myAdapter.listenUsingRfcommWithServiceRecord(NAME, CWJ_UUID); //服务仅监听 } catch (IOException e) { } cwjServerSocket = tmp; } […]

