安卓BLE发送广播

来源:互联网 发布:中兴软件开发怎么样 编辑:程序博客网 时间:2024/06/08 11:11

有接触过安卓蓝牙开发的都知道,咱们可以使用BluetoothAdapter.startLeScan(LeScanCallback);(API21后使用BluetoothLeScanner.startScan(ScanCallback);)去接收周边蓝牙设备的广播。

那么手机如何作为周边设备发送广播呢?

在API21后有一个BluetoothLeAdvertiser顾名思义,该类就是低功耗蓝牙发送广播的一个类,该对象可以通过BluetoothAdapter.getBluetoothLeAdvertiser();获取。详细代码如下:

private static String ADVERTISER_SERVICE_UUID_BASE = "abcd";private static String ADVERTISER_SERVICE_UUID = "0001" + ADVERTISER_SERVICE_UUID_BASE + "-0405-0607-0809-0a0b0c0d0e0f";// 广播包不得超过31字节(详细AdvertiseCallback错误代码)// 也就是说serverData 不得超过23字节private static byte[] EDDYSTONE_SERVER_DATAS = {//      0x02, 0x01, 0x02,//      0x1b, 0x16, 0xcd, 0xab, // uuid        0x17, 0x16, (byte) 0xAA, (byte) 0xFE, // UID type's len is 0x17        0x00,               // UID type        0x08,               // tx power        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // NID        0x01, 0x02, 0x03, 0x04, 0x05, 0x06,                         // BID        (byte) 0xff, (byte) 0xff          // RFU};/** * API必须为21及以上 */private void startBLeAdvertiser() {    bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);    bluetoothAdapter = bluetoothManager.getAdapter();    BluetoothLeAdvertiser advertiser = bluetoothAdapter.getBluetoothLeAdvertiser();    // TODO 在这里设置广播信息    AdvertiseData data = new AdvertiseData.Builder()            .addServiceData(ParcelUuid.fromString(ADVERTISER_SERVICE_UUID),                    EDDYSTONE_SERVER_DATAS).build();    AdvertiseSettings settings = new AdvertiseSettings.Builder().setConnectable(true).build();    text.append("\r\nstartAdvertising...");    advertiser.startAdvertising(settings, data, new AdvertiseCallback() {        @Override        public void onStartSuccess(AdvertiseSettings settingsInEffect) {            super.onStartSuccess(settingsInEffect);            text.append("\r\nonStartSuccess...");            text.append("\r\ntoString:" + settingsInEffect.toString());            text.append("\r\ndescribeContents:" + settingsInEffect.describeContents());            text.append("\r\ngetMode:" + settingsInEffect.getMode());            text.append("\r\ngetTimeout:" + settingsInEffect.getTimeout());            text.append("\r\ngetTxPowerLevel:" + settingsInEffect.getTxPowerLevel());        }        @Override        public void onStartFailure(int errorCode) {            super.onStartFailure(errorCode);            text.append("\r\nerrorCode:" + errorCode);        }    });}

注:每次启动的MAC_ADDRESS都是不一样的。

                                             
0 0
原创粉丝点击