蓝牙灯泡

今天学习了一下智能家居方面的内容,我作为一个新手感觉其实作为Android程序员对于智能家居的软件开发,就类似与我们使用环信的平台的SDK一样,对于SDK内的方法进行调用.

蓝牙灯泡的工作原理:

手机—>蓝牙—>灯泡的蓝牙模块—>灯泡接受指令运行
布局文件:打开蓝牙,关闭蓝牙,扫描周围蓝牙,停止扫描,开灯,关灯,点动等按钮.
权限问题:一定要有两个对蓝牙的操作功能



获取本地蓝牙适配器:

BluetoothAdapter mBluetoothAdapter=BluetoothAdapter.getDefaultAdapter();

打开/关闭手机蓝牙

    // 打开手机蓝牙
               mBluetoothAdapter .enable(); 
    // 关闭手机蓝牙
               mBluetoothAdapter.disable();

当然,我们在实际操作中,我还是觉得我们应该对于对象要先判断空不空的问题.

  //蓝牙是否可用
        if(!mBluetoothAdapter.isEnabled()){
            mBluetoothAdapter.enable();
        }
  //关闭蓝牙
        if(mBluetoothAdapter.isEnabled()){
            mBluetoothAdapter.disable();
        }

扫描蓝牙设备

   //  扫描蓝牙设备
          mBluetoothAdapter.startDiscovery();
      取消扫描蓝牙设备,减少资源的消耗
          mBluetoothAdapter.cancelDiscovery();

那么到这里就出现一个问题,扫描到了的蓝牙设备怎么呈现他们的数据给我,所以为了及时能够获取到信息.我们可以通过广播接收者,蓝牙扫描完成会发送广播,告诉我们他扫描到了什么.

注册广播接收者

添加蓝牙广播接受者

    IntentFilter filter = new IntentFilter();
    // 开始扫描的广播
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);    
    // 扫描完成的广播
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);   
    // 发现一个可用的设备的广播
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    mBluetoothReceiver = new BluetoothReceiver();
    //注册监听
    registerReceiver(mBluetoothReceiver, filter);

获取蓝牙接收者的设备

`//设备数据对象 BluetoothDevice device= intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);`

连接蓝牙设备

这里我们需要注意,因为我们的连接是通过socket连接,需要耗时操作,所以我们就需在子线程运行.

public void connectServer(final BluetoothDevice device) {
    new Thread(new Runnable(){
        @Override
        public void run() {
        try {
                    System.out.println(randomUUID.toString());
                    BluetoothSocket clientSocket = device.
            createRfcommSocketToServiceRecord(
        UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"));
                    clientSocket.connect();
                    out = clientSocket.getOutputStream();
                    System.out.println("连接成功");
                    Looper.prepare();
                   Toast.makeText(BluetoothDemoActivity.this, "连接成功", 0).show();
                   Looper.loop();
        } catch (IOException e) {
                   e.printStackTrace();
        }
        }}).start();
    }

操作灯泡

根据您的客户给的继电器控制指令表,然后你才决定要输出什么数据,决定不同操作,用流的形式输出,16进制.

 try {  // TODO Auto-generated method stub
    byte[] bs=new byte[5];
     bs[0] = (byte)0x01;
     bs[1] = (byte)0x99;
     if(i== 0) {
         bs[2] = (byte)0x10;
         bs[3] = (byte)0x10;
     }else if(i==1) {
         bs[2] = (byte)0x11;
         bs[3] = (byte)0x11;
     }else if(i==2) {
         bs[2] = (byte)0x17;
         bs[3] = (byte)0x17;
     }
     bs[4] = (byte)0x99;

        mOutputStream.write(bs);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

你可能感兴趣的:(Android)