android 蓝牙通信(一)

1、需要在AndroidMainfest.xml里声明蓝牙权限

    <!-- 设置蓝牙的可见时间,以便被其他设备发现并连接 -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <!--检测一个设备是否有蓝牙设备,开启蓝牙设备,获取配对的设备-->
    <uses-permission android:name="android.permission.BLUETOOTH" />

2、BluetoothAdapter

BluetoothAdapter代表了移动设备的本地的蓝牙适配器, 通过该蓝牙适配器可以对蓝牙进行基本操作,例如:
启动设备发现(startDiscovery),
获取已配对设备(getBoundedDevices),
通过mac蓝牙地址获取蓝牙设备(getRemoteDevice),
从其它设备创建一个监听连接(listenUsingRfcommWithServiceRecord);

2.1 获取蓝牙适配器对象
 BluetoothAdapter mAdapter = BluetoothAdapter.getDefaultAdapter();
    //判断是否支持蓝牙设备
    private void isSupportBlueTooth() {
        if(mAdapter == null){
            Log.i(TAG, "本机没有蓝牙设备");
        }else{
            Log.i(TAG, "本机有蓝牙设备");
        }
    }
    /**
     * 判断蓝牙状态,不可用则打开蓝牙,可用则输出一些蓝牙信息
     */
    private void judgeState() {
        if(!mAdapter.isEnabled()){
            Log.i(TAG, "蓝牙设备目前不可用");
            mAdapter.enable();//打开本地蓝牙适配器
        }else{
            Log.i(TAG, "蓝牙设备目前可用,下面获取蓝牙设备信息");
            Log.d(TAG, "蓝牙地址:"+mAdapter.getAddress());
            Log.d(TAG, "蓝牙名称:"+mAdapter.getName());
            Log.d(TAG, "蓝牙状态方法(是否可用):"+mAdapter.getState());
            Log.d(TAG, "检测蓝牙地址是否正确: 1、地址aaa:"+mAdapter.checkBluetoothAddress("aaa")+
                    "   2、 地址00:43:A8:23:10:F0 :"+mAdapter.checkBluetoothAddress("00:43:A8:23:10:F0"));
        }
    }
2.2 搜索周围蓝牙设备

2.2.1开始搜索只要一行代码

mAdapter.startDiscovery();

2.2.2 通过注册BroadCastReciver,获取蓝牙信息
首先,定义广播接收者

    // case后面必须跟常量,必须要常量 加final
    static final int ACTION_FOND = 11011;
    static final int DISCOVERY_FINISHED = 11012;
    static final int DISCOVERY_START = 11015;

mReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction();

                    Message msg = new Message();
                    msg.obj = intent;
                    if (BluetoothDevice.ACTION_FOUND.equals(action)) {// 获得已经搜索到的蓝牙设备
                        Log.e(TAG, "接收到action=BluetoothDevice.ACTION_FOUND");
                        msg.what = ACTION_FOND;
                        handler.sendMessage(msg);
                    } 
                else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
                            .equals(action)) {// 搜索完毕
                        Log.e(TAG, "接收到 action=BluetoothAdapter.ACTION_DISCOVERY_FINISHED");
                        msg.what = DISCOVERY_FINISHED;
                        handler.sendMessage(msg);
                    }
                else if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
                        Log.e(TAG, "接收到 action=BluetoothAdapter.ACTION_DISCOVERY_STARTED");
                        msg.what = DISCOVERY_START;
                        handler.sendMessage(msg);
                    }
                }
            };

动态注册广播地址

IntentFilter btDiscoveryFilter = new IntentFilter();
            btDiscoveryFilter
                    .addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);// 开始搜索
            btDiscoveryFilter
                    .addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);// 搜索完毕
            btDiscoveryFilter.addAction(BluetoothDevice.ACTION_FOUND);// 发现远程设备

            this.registerReceiver(mReceiver, btDiscoveryFilter);

实现Handler

handler = new Handler(new Handler.Callback() {
            public boolean handleMessage(Message msg) {
                switch (msg.what) {
                case DISCOVERY_START:
                    Log.d(TAG, "-----------搜索开始-------------");
                    break;
                case ACTION_FOND:
                    Intent intent = (Intent) msg.obj;
                    BluetoothDevice device = intent
                .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    Log.i(TAG, "find device:" + device.getName());
                    break;
                case DISCOVERY_FINISHED:
                    Log.d(TAG, "-----------搜索完成-------------");
                    break;
                }
                return false;
            }
        });
2.3 效果图

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值