Android——Bluetooth 开发(一)

前言

最近公司在做关于蓝牙设备的开发,从来没有接触过手机端和外设备连接的开发,周围的圈子也都没做过相关的开发,让我无从下手。在网上查找了好多例子,也找了很多demo。
先来说说链接蓝牙的步骤:
一、初始化蓝牙,判断是否打开蓝牙:

if (mBluetoothManager == null) {
  mBluetoothManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
            if (mBluetoothManager == null) {
                Log.e(TAG, "Unable to initialize BluetoothManager.");
                return;
            }
        }

        mBluetoothAdapter = mBluetoothManager.getAdapter();
        if (mBluetoothAdapter == null) {
            Log.e(TAG, "Unable to obtain a BluetoothAdapter.");
            return;
        }
      if (!mBluetoothAdapter.isEnabled()) {
            if (!mBluetoothAdapter.isEnabled()) {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivity(enableBtIntent);
            }
        } 

二、链接你想要的蓝牙,进行搜索蓝牙服务:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);         intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);      intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);        intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);        intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intentFilter.setPriority(Integer.MAX_VALUE);//设置优先级
// 注册广播接收器,接收并处理搜索结果
mContext.registerReceiver(receiver, intentFilter);
// 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
mBluetoothAdapter.startDiscovery();

三、根据服务UUID进行链接通讯的服务通道:
然而大多数都是讲BluetoothSocket 链接,然后创建服务进行通讯;
下面是链接时的代码

private void connect(BluetoothDevice device) throws IOException {
        final String SPP_UUID = getUUID();
        Log.i(TAG+"UUID::::",SPP_UUID);
        UUID uuid = UUID.fromString(SPP_UUID);
        BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
        try {
            socket =(BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[] {int.class}).invoke(device,1);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        Log.i(TAG,"正在链接。。。");
        socket.connect();
        Log.i(TAG,"链接成功");
    }

第三步我花了很长时间,换了各种UUID都没有很好的链接上蓝牙,更不用说向蓝牙写入数据了。这种方法在手机与手机进行连接和发送内容是可以的,但是与外设链接并读取数据,这个方法不可行。

这让我痛不欲生啊,iOS端已经可以很好的向蓝牙写入命令,读取外设数据,而安卓还没有链接上设备,这叫我情何以堪。在我对Android心灰意冷的时候,在Android的开发文档中找到了关于蓝牙设备开发的demo,二话不说,直接下载,进行参照。

官方LE蓝牙开发demo:CSDN下载地址

接下来我会把我自己参照demo写的代码进行说明,方便以后观看。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值