您的位置:首页 > 移动开发 > Android开发

Android蓝牙开发入门

2016-08-10 16:23 190 查看
        在Android开发中不免会涉及到蓝牙的使用,尤其是在物联网发展迅速的现在,好多设备都是通过蓝牙来连接的,今天我们就简单的了解一下Android开发蓝牙,这里只是对蓝牙简单的做一个入门的解释,后面会继续对蓝牙的各个功能深入去讲解。

        首先,在Android手机上开发蓝牙操作,需要用到android.bluetooth包,其中BluetoothAdapter是蓝牙开发中的核心类,代表本地蓝牙适配器设备,用户能够通过BluetoothAdapter进行一些基本的蓝牙操作,例如:判断本机的蓝牙是否开启、打开和关闭蓝牙、搜索附近设备等,接下来我们就通过代码来具体的了解下蓝牙的操作。

       开启蓝牙也是属于敏感操作,所以需要在AndroidManifest.xml文件中声明操作权限,否则会报错,这点千万不要疏忽

<uses-permission android:name="android.permission.BLUETOOTH"/>    //允许配对设备
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>    //允许发现设备


        判断本机是否支持蓝牙,新建BluetoothAdapter对象来判断

BluetoothAdapter mBluetoothAdapter = android.bluetooth.BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter == null) {
Toast.makeText(this, "该设备不支持蓝牙!", Toast.LENGTH_LONG).show();
}
        这里需要有一点注意的是,该方式适用于在API<=17时使用,当在API>=18时,使用getSystemService(Context.BLUETOOTH_SERVICE),获取BluetoothManager,然后通过BluetoothManager.getAdapter()的方式,获取BluetoothAdapter,因此我们可以在程序中这样去判断:
public static BluetoothAdapter getDefaultAdapter(Context context) {
BluetoothAdapter mBluetoothAdapter = null;
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
final BluetoothManager bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
}
return mBluetoothAdapter;
}
if(mBluetoothAdapter == null) {
Toast.makeText(this, "该设备不支持蓝牙!", Toast.LENGTH_LONG).show();
}


        打开蓝牙的方式有好多种,1、可以在系统的设置->蓝牙中去开启蓝牙;2、也可以在自己的程序中去直接开启蓝牙,首先调用BluetoothAdapter的isEnabled()方法判断蓝牙是否已经开启,然后根据返回值去调用enable()打开蓝牙或者disable()去关闭蓝牙;3、通过Intent隐式意图是开启,开启时访问用户是否去要开启(毕竟蓝牙属于敏感操作,在开启时是否需要去询问用户,根据实际情况去使用)

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
//判断蓝牙功能是否打开
if (!mBluetoothAdapter.isEnabled()) {
//没有打开,就启动确认窗口询问用户是否打开
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
}


        获取本机蓝牙的信息,我们可以通过BluetoothAdapter对象去调用getName()方法获取本机蓝牙的名称,getState()方法去获取本机蓝牙的状态,状态有四种,用常量值表示:

                10  STATE_OFF                         // 蓝牙已经关闭

                11  STATE_TURNING_OFF     // 蓝牙正在关闭

                12  STATE_ON                           // 蓝牙已经打开

                13  STATE_TURNING_ON      // 蓝牙正在打开

        接下来就是搜索附近蓝牙设备了,由于搜索到的蓝牙设备都是通过广播返回的,所以我们需要使用广播来接收已经搜索到的蓝牙设备信息,当开始搜索是,系统会发出一个BluetoothAdapter.ACTION_DISCOVERY_STARTED的广播,当搜索结束后,系统会发出一个BluetoothAdapter.ACTION_DISCOVERY_FINISHED的广播,当搜索到某个可以连接的设备时,系统会发出一个BluetoothAdapter.ACTION_FOUND的广播,并将该设备信息保存至广播对应的Intent中,代码如下:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(action.equals(BluetoothDevice.ACTION_FOUND)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(device.getBondState() != BluetoothDevice.BOND_BONDED) {
mTextView.append(device.getName() + ":" + device.getAddress() + "\n\n");//将搜索到的可连接设备名称和地址放到一个TextView中
}
} else if(action.equals(android.bluetooth.BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
//搜索结束
}
}
};
        在以上代码中,我们用BluetoothDevice类对象去接收Intent传递的蓝牙设备信息,其中保存有该设备的相关信息;

         在onCreat()方法中注册广播,并且在程序结束后在onDestroy()方法中取消注册

IntentFilter mFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, mFilter);

mFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(mReceiver, mFilter);
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(mReceiver);
}


        通过以上操作,我们就可以进行简单的开启蓝牙并搜索附近的蓝牙设备了,这里只是贴出了相关功能的代码,并没有涉及到对应的界面操作代码,大家有兴趣的可以自己去美化界面,通过一个开关按钮去开启/关闭蓝牙,将搜索到的设备信息以ListView的形式展现出来等。

        以上如有不合理或者错误之处,还望大家留言指出,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 蓝牙 Bluetooth