当前位置: 首页 > news >正文

关于建设工程资质网站时装网站的建设

关于建设工程资质网站,时装网站的建设,龙岗网站建设_公司推广,网站建设企业号助手android 从4.3系统开始可以连接BLE设备#xff0c;这个大家都知道了。iOS是从7.0版本开始支持BLE。android 进入5.0时代时#xff0c;开放了一个新功能#xff0c;手机可以模拟设备发出BLE广播#xff0c; 这个新功能其实是 对标于 iOS系统的手机模拟iBeacon设备。先介绍一… android 从4.3系统开始可以连接BLE设备这个大家都知道了。iOS是从7.0版本开始支持BLE。android 进入5.0时代时开放了一个新功能手机可以模拟设备发出BLE广播 这个新功能其实是 对标于 iOS系统的手机模拟iBeacon设备。先介绍一下BLE的广播 BLE设备之所以能被手机扫描到是因为 BLE设备一直在每隔 一段时间广播一次这个广播里面包含很多数据。手机扫描BLE设备代码如下public void startScan(){bluetoothAdapter.startLeScan(leScanCallback);}public void stopScan(){bluetoothAdapter.stopLeScan(leScanCallback);}private LeScanCallback leScanCallbacknew LeScanCallback() {Overridepublic void onLeScan(BluetoothDevice bluetoothdeivce, int rssi, byte[] scandata) {//把byte数组转成16进制字符串方便查看Log.e(TAG,scandata: CYUtils.Bytes2HexString(scandata));}}; ok这段代码大家在做连接BLE设备进行通讯的时候已经很熟悉了。其中的 byte数组 scandata就是 BLE设备的广播数据。那么接下来我们开始使用 手机1 模拟成BLE设备来发送广播然后用手机2 来进行扫描查看广播数据 scandata首先获取 BluetoothAdapter 熟悉的代码BluetoothManager bluetoothManager (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);bluetoothAdapter bluetoothManager.getAdapter();进行广播的时候需要用到BluetoothLeAdvertiser进行实例化mBluetoothLeAdvertiser bluetoothAdapter.getBluetoothLeAdvertiser(); 实例化好之后就可以进行广播数据了开启广播方法是BluetoothLeAdvertiser: public void startAdvertising(AdvertiseSettings settings,AdvertiseData advertiseData, final AdvertiseCallback callback) 其中 AdvertiseSettings 是广播的一些设置比如广播间隔是否可以连接等等; AdvertiseData 就是广播数据了 AdvertiseCallback是广播回调会告诉你广播成功还是失败。先给一段完整广播代码如下public void startAction(View v){byte[] broadcastData {0x34,0x56};mBluetoothLeAdvertiser.startAdvertising(createAdvSettings(true, 0), createAdvertiseData(broadcastData), mAdvertiseCallback);}public void stopAction(View v) {mBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback);}public AdvertiseSettings createAdvSettings(boolean connectable, int timeoutMillis) {AdvertiseSettings.Builder mSettingsbuilder new AdvertiseSettings.Builder();mSettingsbuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);mSettingsbuilder.setConnectable(connectable);mSettingsbuilder.setTimeout(timeoutMillis);AdvertiseSettings mAdvertiseSettings mSettingsbuilder.build();return mAdvertiseSettings;}public AdvertiseData createAdvertiseData(byte[] data) {AdvertiseData.Builder mDataBuilder new AdvertiseData.Builder();mDataBuilder.addManufacturerData(0x01AC, data);AdvertiseData mAdvertiseData mDataBuilder.build();return mAdvertiseData;}private AdvertiseCallback mAdvertiseCallback new AdvertiseCallback() {Overridepublic void onStartSuccess(AdvertiseSettings settingsInEffect) {super.onStartSuccess(settingsInEffect);ToastUtils.showToast(MainActivity.this, 开启广播成功, 2000);}Overridepublic void onStartFailure(int errorCode) {super.onStartFailure(errorCode);ToastUtils.showToast(MainActivity.this, 开启广播失败 errorCode errorCode, 2000);}};其中广播数据broadcastData 我暂时直接先定死为2个字节 0x3456同样在createAdvertiseData里面也有定死的数据 0x01AC . 开启成功之后我们使用手机2 来扫描看下广播的数据是什么E/TAG: scandata:02011A05FFAC0134560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 log打印出来的scandata 有效数据是 02011A05FFAC013456 . 给大家解释一下这个数据的意思为了看清楚我分段如下 02011A 05 FF AC01 3456 注这里的都是16进制数字02011A这3个字节02表示后面一段数据长度为2字节01表示数据类型是flag ,1A就是flag的数据了05 表示后面的一段数据长度为 5个字节 FF一个字节AC01 两个字节3456两个字节加起来一共5个字节老铁没毛病FF是一个数据类型这是我们通过代码mDataBuilder.addManufacturerData(0x01AC, data); 添加广播数据时候设置的ManufacturerData 是指设备厂商自定义数据FF 就是代表下面的数据实体是厂商数据.第一个参数0x01AC是厂商idid长度为2个字节不足2个字节系统会补0可以看到log打印出来的是 AC01顺序是倒过来的这点要注意如果我代码是这样写的 mDataBuilder.addManufacturerData(0xAC, data); //只写了一个字节的id 那么使用手机2 扫描出的scandata是E/TAG: scandata:02011A05FFAC0034560000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 可以看到AC后面系统自动补了00广播数据出除了可以添加ManufacturerData还可以添加ServerUUID, 代码如下public AdvertiseData createAdvertiseData(byte[] data) {AdvertiseData.Builder mDataBuilder new AdvertiseData.Builder();mDataBuilder.addManufacturerData(0x01AC, data);mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));AdvertiseData mAdvertiseData mDataBuilder.build();return mAdvertiseData;} 代码添加了一个 AE8F的 server uuid 使用手机2 扫描的scandata 如下E/TAG: scandata:02011A05FFAC01345603038FAE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 直接看03038FAE 这一段第一个03 表示后面的一段数据长度为3个字节 第二个03 表示这个数据类型是 server uuid类型uuid的数据就是8FAE顺序是倒过来的有人会问 如果 我把addServiceUuid代码放在 addManufacturerData 前面扫描的数据顺序是什么样的呢答案 还是E/TAG: scandata:02011A05FFAC01345603038FAE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 可以添加多个 server uuid吗 可以代码如下public AdvertiseData createAdvertiseData(byte[] data) {AdvertiseData.Builder mDataBuilder new AdvertiseData.Builder();mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addManufacturerData(0x01AC, data);AdvertiseData mAdvertiseData mDataBuilder.build();return mAdvertiseData;} 扫描的结果是E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 直接看0503 8FAE E1FF 这一段 05 表示后面的一段数据长度是5个字节03表示数据类型是 server uuid 8FAE是第一个uuid, E1FF是第二个uuid这个ServerUUID 有什么用呢 不知大家在扫描BLE设备的时候有没有注意到这个方法BluetoothAdapter public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback)这个方法也可以用来扫描BLE设备但是多了一个参数 UUID数组 这个扫描方法是用来过滤BLE设备用的比如 你公司开发一个 蓝牙防丢器APP你使用 startLeScan(callback)这个方法扫描的话你会发现你扫描到周围的所有的BLE设备同事戴的小米手环可能也被你扫描到这样让用户来选择设备进行连接的话可能就比较迷糊startLeScan(serviceUuids,callback) 这个方法在扫描的时候会过滤广播里的数据只有符合的BLE设备才会被扫描回调。 所以你们公司的蓝牙防丢器设备可以在广播字段里加入特定的server uuid app扫描的时候可以过滤其他设备。我们来实现一下这个功能 修改 手机2 的扫描代码public void startScan(){UUID[] serviceUuids new UUID[] { UUID .fromString(0000ae8f-0000-1000-8000-00805f9b34fb) };bluetoothAdapter.startLeScan(serviceUuids, leScanCallback);}public void stopScan(){bluetoothAdapter.stopLeScan(leScanCallback);}private LeScanCallback leScanCallbacknew LeScanCallback() {Overridepublic void onLeScan(BluetoothDevice bluetoothdeivce, int rssi, byte[] scandata) {//把byte数组转成16进制字符串方便查看Log.e(TAG,scandata: CYUtils.Bytes2HexString(scandata));}}; 扫描结果是这样的05-23 16:13:30.522 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:30.625 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:30.735 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:30.847 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:30.955 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:31.061 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:31.192 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:31.283 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:31.369 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 05-23 16:13:31.480 10197-10197/jiqi.blescandemo E/TAG: scandata:02011A05FFAC01345605038FAEE1FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 可以发现扫描结果里面只会出现拥有 AE8F 这个uuid的 BLE设备搜索不到其他设备注意部分手机使用startLeScan(serviceUuids,callback)这个方法过滤设备 会扫描不到设备即使这个设备UUID符合过滤条件我归结为手机/系统问题如三星手机这样我们知道广播数据可以添加ManufacturerData还可以添加ServerUUID, 还有吗 有代码如下public AdvertiseData createAdvertiseData(byte[] data) {AdvertiseData.Builder mDataBuilder new AdvertiseData.Builder();mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x64,0x12});mDataBuilder.addManufacturerData(0x01AC, data);AdvertiseData mAdvertiseData mDataBuilder.build();return mAdvertiseData;}扫描结果如下E/TAG: scandata:02011A05FFAC01345605038FAEE1FF05168FAE64120000000000000000000000000000000000000000000000000000000000000000000000000000000000 直接看05168FAE6412 这一段05依然表示下面一段数据长度为5个字节16表示数据类型为 server data 8FAE表示这个数据的uuid是AE8F 6412就是数据本体了.那么这个 server data能做什么呢比如有这样一个 产品温度计温度计硬件在广播字段里的server data里面加入它测量的温度这样APP可以不连接温度计设备 只通过扫描就知道温度了是不是很方便.以下有几个坑请大家注意一下情况1public AdvertiseData createAdvertiseData(byte[] data) {AdvertiseData.Builder mDataBuilder new AdvertiseData.Builder();// mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x64,0x12});mDataBuilder.addManufacturerData(0x01AC, data);AdvertiseData mAdvertiseData mDataBuilder.build();return mAdvertiseData;}我注释了一句代码广播字段里我没有 添加 ae8f这个 uuid而直接添加了 ae8f的data 为 0x6412那么扫描结果如何使用startLeScan(serviceUuids,callback)过滤 ae8f这个uuid没有扫描结果;使用startLeScan(callback),扫描结果如下E/TAG: scandata:02011A05FFAC0134560303E1FF05168FAE641200000000000000000000000000000000000000000000000000000000000000000000000000000000000000可以看到是有 ae8f对应的数据 6412但是server uuid里面是没有 ae8f的.情况2代码顺序1mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb),new byte[]{0x22,0x44});mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x54,0x12});//扫描结果 E/TAG: scandata:02011A05FFAC01345605038FAEE1FF05168FAE54120000000000000000000000000000000000000000000000000000000000000000000000000000000000代码顺序2mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x54,0x11});mDataBuilder.addServiceData( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb),new byte[]{0x22,0x43});//扫描结果 E/TAG: scandata:02011A05FFAC01345605038FAEE1FF05168FAE54110000000000000000000000000000000000000000000000000000000000000000000000000000000000代码顺序3mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x54,0x1A});mDataBuilder.addServiceData( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb),new byte[]{0x22,0x47});//扫描结果 E/TAG: scandata:02011A05FFAC0134560503E1FF8FAE05168FAE541A0000000000000000000000000000000000000000000000000000000000000000000000000000000000代码顺序4mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceUuid( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb));mDataBuilder.addServiceData( ParcelUuid.fromString(0000ffe1-0000-1000-8000-00805f9b34fb),new byte[]{0x22,0x48});mDataBuilder.addServiceData( ParcelUuid.fromString(0000ae8f-0000-1000-8000-00805f9b34fb),new byte[]{0x54,0x1B});//扫描结果 E/TAG: scandata:02011A05FFAC0134560503E1FF8FAE05168FAE541B0000000000000000000000000000000000000000000000000000000000000000000000000000000000情况2总结从上面4个代码顺序的结果来看总是扫描到 ae8f这个uuid对应的数据没有第二个 server data但是为什么每次都是ae8f我TM也不知道AdvertiseData介绍完毕下面再稍微介绍一下 AdvertiseSettingsAdvertiseSettings.Builder mSettingsbuilder new AdvertiseSettings.Builder();mSettingsbuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY);mSettingsbuilder.setConnectable(connectable);mSettingsbuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);mSettingsbuilder.setTimeout(0);AdvertiseSettings mAdvertiseSettings mSettingsbuilder.build();setAdvertiseMode(int advertiseMode)设置广播的模式低功耗平衡和低延迟三种模式对应 AdvertiseSettings.ADVERTISE_MODE_LOW_POWER ,ADVERTISE_MODE_BALANCED ,ADVERTISE_MODE_LOW_LATENCY从左右到右广播的间隔会越来越短 setConnectable(boolean connectable)设置是否可以连接。广播分为可连接广播和不可连接广播一般不可连接广播应用在iBeacon设备上这样APP无法连接上iBeacon设备setTimeout(int timeoutMillis)设置广播的最长时间最大值为常量AdvertiseSettings.LIMITED_ADVERTISING_MAX_MILLIS 180 * 1000; 180秒设为0时代表无时间限制会一直广播setTxPowerLevel(int txPowerLevel)设置广播的信号强度常量有AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW,ADVERTISE_TX_POWER_LOW,ADVERTISE_TX_POWER_MEDIUM,ADVERTISE_TX_POWER_HIGH 从左到右分别表示强度越来越强. 举例当设置为ADVERTISE_TX_POWER_ULTRA_LOW时手机1和手机2放在一起手机2扫描到的rssi信号强度为-56左右当设置为ADVERTISE_TX_POWER_HIGH 时 扫描到的信号强度为-33左右信号强度越大表示手机和设备靠的越近好了关于BluetoothLeAdvertiser 的用法介绍完毕可能有人会说bluetoothAdapter.startLeScan(leScanCallback); 这个方法过时了怎么办那可以看一下我的另一篇文章《android BLE 扫描BLE设备 BluetoothLeScanner》源码附件模拟BLE广播源码http://pan.baidu.com/s/1bptOQyb手机2扫描打印的源码就不放出了很简单。android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser   转载于:https://www.cnblogs.com/Free-Thinker/p/9292183.html
http://www.pierceye.com/news/867336/

相关文章:

  • 怎么免费做网站视频教学沈阳网站备案
  • 徐州有哪些网站制作公司太原住房和城乡建设部网站
  • 专门做摩托车的网站注册域名阿里云
  • 做个简单的网站建站公司费用
  • 网站建设举措网站免费建站方法
  • 遵义市双控体系建设网站wamp wordpress安装
  • 厦门的网站建设公司龙岗网站-建设深圳信科
  • 上海网站建设q.479185700強成都上界品牌设计事务所
  • 产品设计优秀网站做网站申请多少类商标
  • 中国行业网站贵州网站建设seo优化
  • 网站部兼容ie6没有防盗链的网站
  • google网站推广网站自助平台
  • 外贸自建站多久能出单wordpress的pdf阅读
  • 深圳东莞的网站建设公司网店代运营哪里好
  • 做费网站wordpress折叠代码
  • 分析海报的网站企业网站服务费怎么做记账凭证
  • 海南建设大厅网站888网创
  • aspnet网站开发实例项目河南网站建设推广
  • ppt免费模板大全网站微网站建设网站
  • 郑州网站建设七彩科技网络服务器配置设计
  • 专业企专业企业网站设计洛阳青峰网络
  • 网站开发需要多少钱如何销售管理系统需求分析
  • 西安网站建设查派9861云南网站建设
  • 做微商网站制作网站曝光率
  • 平价网站平价网站建设建设百度电话号码
  • 有哪些做拎包入住的网站中国建设银行网站会员用户名
  • 用模板搭建的网站备案吗wordpress热门文章调用
  • 有哪些电商网站中山视角做网站的公司
  • 做网站 点击跳转html菜鸟教程下载
  • 苏州做公司网站设计的公司嘉盛建设集团官方网站