蓝牙灯泡

来源:互联网 发布:加速度传感器算法 编辑:程序博客网 时间:2024/04/29 00:23

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

蓝牙灯泡的工作原理:

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

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/><uses-permission android:name="android.permission.BLUETOOTH"/>

获取本地蓝牙适配器:

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();    }
0 0
原创粉丝点击