微信开发之八 页面获取周围beacon设备
原文链接:https://blog.csdn.net/qq_37936542/article/details/78912197
--注意:微信测试号不具备这个功能
步骤一:绑定域名 注意不要加http://
步骤二:引入js文件
--在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js
- <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
步骤三:通过ajax获取参数,完成config接口注入权限验证配置
--ajax请求
- var url = location.href.split('#')[0];
- $.ajax({
- type:"GET",
- url:"signature.action?url=" + url,
- dataType:"json",
- success:function(data){
- if (data){
- wx.config({
- debug: false,
- appId: data.appid,
- timestamp: data.timestamp,
- nonceStr: data.nonceStr,
- signature: data.signature,
- jsApiList: [// 这个必须要配置,不然会报权限不足的错误
- 'checkJsApi',
- 'getNetworkType',//网络状态接口
- 'openLocation',//使用微信内置地图查看地理位置接口
- 'getLocation', //获取地理位置接口
- 'startSearchBeacons',//开启扫描周边设备
- 'stopSearchBeacons'//停止扫描
- ]
- });
- }
- }
- });
--后台代码
注:jsapi-ticket的获取在前一节中讲过,这里就带过
- @RequestMapping(value = "signature", method = RequestMethod.GET)
- @ResponseBody
- public Map<String, String> createSignature(@RequestParam String url)
- {
- System.out.println("RestFul of createSignature parameters url:"+url);
- return SignatureUtil.sign(tokenService.getJsapi_ticket(), url);
- }
- public static Map<String, String> sign(String jsapi_ticket, String url) {
- Map<String, String> ret = new HashMap<String, String>();
- String nonce_str = create_nonce_str();
- String timestamp = create_timestamp();
- String str;
- String signature = "";
- //注意这里参数名必须全部小写,且必须有序
- str = "jsapi_ticket=" + jsapi_ticket +
- "&noncestr=" + nonce_str +
- "×tamp=" + timestamp +
- "&url=" + url;
- try
- {
- MessageDigest crypt = MessageDigest.getInstance("SHA-1");
- crypt.reset();
- crypt.update(str.getBytes("UTF-8"));
- signature = byteToHex(crypt.digest());
- }
- catch (NoSuchAlgorithmException e)
- {
- e.printStackTrace();
- }
- catch (UnsupportedEncodingException e)
- {
- e.printStackTrace();
- }
- ret.put("url", url);
- ret.put("jsapi_ticket", jsapi_ticket);
- ret.put("nonceStr", nonce_str);
- ret.put("timestamp", timestamp);
- ret.put("signature", signature);
- ret.put("appid", WeChatInfo.WX_APPID);
- return ret;
- }
- private static String byteToHex(final byte[] hash) {
- Formatter formatter = new Formatter();
- for (byte b : hash)
- {
- formatter.format("%02x", b);
- }
- String result = formatter.toString();
- formatter.close();
- return result;
- }
- private static String create_nonce_str() {
- return UUID.randomUUID().toString();
- }
- private static String create_timestamp() {
- return Long.toString(System.currentTimeMillis() / 1000);
- }
步骤四:通过ready接口处理成功验证
- wx.ready(function(){
- // 蓝牙扫描接口
- wx.startSearchBeacons({
- ticket:"", //摇周边的业务ticket, 系统自动添加在摇出来的页面链接后面
- success: function(res){
- wx.onSearchBeacons({
- complete:function(data){
- alert(JSON.stringify(data));
- showBeacon(data.beacons);//处理返回的beacon数组
- }
- });
- },
- fail:function(res){
- var errmsg = JSON.stringify(res.errMsg);
- var arr = errmsg.split(':');
- var errmsgBody = arr[1];
- if(errmsgBody.substr(0, 9) == "bluetooth"){
- alert("蓝牙未打开,请打开后重试!");
- } else if(errmsgBody.substr(0, 8) == "location"){
- alert("手机位置未打开,请打开后重试!");
- }else{
- alert(JSON.stringify(res));
- }
- }
- });
- });
- wx.error(function(res){//验证错误时执行的函数
- alert(JSON.stringify(res));
- });
函数详解:
1.开启查找周边ibeacon设备接口
wx.startSearchBeacons({
ticket:"",
complete:function(argv){
//回调函数
}
});
返回参数说明
打开成功返回:“startSearchBeacons:ok”;
打开后未stop再次打开 :“startSearchBeacons:already started”;
蓝牙未打开返回 :“startSearchBeacons:bluetooth power off”;
地理位置服务未打开返回: “startSearchBeacons:location service disable”;
系统不支持返回 :“startSearchBeacons:system unsupported”。
2. 关闭查找周边ibeacon设备接口
wx.stopSearchBeacons({
complete:function(res){
//回调函数
}
});
返回说明
关闭成功返回“stopSearchBeacons:ok”;
3.监听周边ibeacon设备接口(这个函数写在startSearchBeacons的回调函数里面)
wx.onSearchBeacons({
complete:function(argv){
//回调函数
}
});
返回数据为数组
onSearchBeacons:
{
"beacons":[
{
"major":10008,
"minor":57686,
"uuid":"FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
"accuracy":"0.235344",
"rssi":"-66",
"proximity":"1",
"heading":"288.1355"
},
{
"major":10008,
"minor":57687,
"uuid":"FDA50693-A4E2-4FB1-AFCF-C6EB07647825",
"accuracy":"0.349124",
"rssi":"-49",
"proximity":"2",
"heading":"288.1355"
}
]
}
参数说明
参数 说明
UUID、major、minor UUID、major、minor
accuracy 距离,单位为米
proximity 精度,0:CLProximityUnknown, 1:CLProximityImmediate, 2:CLProximityNear, 3:CLProximityFar
rssi 接收信号的强度指示
heading 接收信号时设备的方向(安卓设备返回有此字段,iOS无);iOS设备若需要获取方向,可以利用HTML5标准API获取, 查看示例
文末福利:
福利一:前端,Java,产品经理,微信小程序,Python等10G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880
福利二:微信小程序入门与实战全套详细视频教程
【领取方法】
关注 【编程微刊】微信公众号:
回复【小程序demo】一键领取130个微信小程序源码demo资源。
回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集10G资源大放送。
90后前端妹子,爱编程,爱运营,爱折腾。
坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。
微信开发之八 页面获取周围beacon设备的更多相关文章
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(1)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- 基于Jquery WeUI的微信开发H5页面控件的经验总结(2)
在微信开发H5页面的时候,往往借助于WeUI或者Jquery WeUI等基础上进行界面效果的开发,由于本人喜欢在Asp.net的Web界面上使用JQuery,因此比较倾向于使用 jQuery WeUI ...
- Java开发微信公众号(五)---微信开发中如何获取access_token以及缓存access_token
获取access_token是微信api最重要的一个部分,因为调用其他api很多都需要用到access_token.比如自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等在请求的时候 ...
- 微信开发笔记:获取用户openid,以及用户头像昵称等信息
微信开发的时候有一个很便利的途径来进行一个用户的一步注册登录,就是使用用户的微信信息来直接进行登陆,可以省去很多不必要的麻烦.那具体这些信息是如何来获取的呢? 首先呢,我们需要对微信进行一个授权,让微 ...
- 微信小程序中获取高度及设备的方法
由于js中可以采用操纵dom的方法来获取页面元素的高度,可是在微信小程序中不能操纵dom,经过查找之后发现仅仅只有以下几个方法可以获取到高度 wx.getSystemInfoSync().window ...
- 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
微信开发获取地理位置实例(java,非常详细,附工程源码) 在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一 ...
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一些必要的配置,以及如何调用微信接口. 2.微信开发之通过代理调试 ...
- 微信测试号开发之九 微信网页授权:页面获取用户openid
原文链接:https://blog.csdn.net/qq_37936542/article/details/78981369 一:配置接口 注意:这里填写的是域名(是一个字符串),而不是URL,因此 ...
- [麦先生]TP3.2之微信开发那点事[基础篇](获取access_token)
在微信文档中一共提供了两个access_token:一个是伪全局配置的Access_token;一个是在微信网页授权时的小Access_token 很多刚刚接触微信开发的人经常会混淆这两个的作用: 我 ...
随机推荐
- beego的orm ,用的数据库sqlite3
测试 beego的orm ,用的数据库sqlite3 1 package main import ( "fmt" "github.com/astaxie/beego/or ...
- BZOJ3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机)
Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看. ...
- Flask项目之手机端租房网站的实战开发(十四)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...
- 关于hive里安装mysql出现错误,如何删除指定的主机或用户?(解决Access denied)
前期博客 你可以按照我写的这篇博客去,按照hive的mysql. 1 复习ha相关 + weekend110的hive的元数据库mysql方式安装配置(完全正确配法)(CentOS版本)(包含卸载系统 ...
- Vue 执行npm run dev时报了三个warning的原因
刚装上了win10,用vue运行下项目,输入npm run dev之后报了三个以下错误: There are multiple modules with names that only differ ...
- session 、cookie、token的区别及联系
本文转自:https://blog.csdn.net/jikeehuang/article/details/51488020:https://blog.csdn.net/weixin_37196194 ...
- Java Web学习总结(5)——HttpServletResponse对象详解
一.HttpServletResponse常见应用--生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类, 生成随机图片范例: package gacl.r ...
- jquery中empty()和remove()的区别
empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点. remove与empty一样,都是移除元素的方法,但是remove会将元素自身移除,同时也会移除元素内 ...
- WebService--CXF以及CXF与Spring的整合(jaxws:server形式配置)
前言:好记性不如烂笔头,写博客的好处是,以前接触的东西即便忘记了,也可以从这里查找. Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来 ...
- Codeforces Round #258 (Div. 2)——B. Sort the Array
B. Sort the Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...