微信小程序蓝牙教程--完整版亲测

微信小程序蓝牙教程--完整版亲测,第1张

#使用mpvue 开发小程序过程中 简单介绍一下微信小程序蓝牙连接过程

#在蓝牙连接的过程中部分api需要加定时器延时1秒到2秒左右再执行,原因为何不知道,小程序有这样的要求

#1首先是要初始化蓝牙:openBluetoothAdapter()

```js

if (wxopenBluetoothAdapter) {

wxopenBluetoothAdapter({

        success: function(res) {

            / 获取本机的蓝牙状态 /

            setTimeout(() => {

                getBluetoothAdapterState()

            }, 1000)

        },

        fail: function(err) {

            // 初始化失败

        }

    })

    } else {    

    }

```

#2检测本机蓝牙是否可用:

#  要在上述的初始化蓝牙成功之后回调里调用

```js

getBluetoothAdapterState() {

    var that= this;

    thattoastTitle= '检查蓝牙状态'

wxgetBluetoothAdapterState({

        success: function(res) {

startBluetoothDevicesDiscovery()

},

        fail(res) {

            consolelog(res)

}

})

}

```

#3 开始搜索蓝牙设备

```js

startBluetoothDevicesDiscovery() {

    var that= this;

    setTimeout(() => {

wxstartBluetoothDevicesDiscovery({

            success: function(res) {

/ 获取蓝牙设备列表 /

                thatgetBluetoothDevices()

},

            fail(res) {

}

})

}, 1000)

}

```

#4 获取搜索到的蓝牙设备列表

# / thatdeviceName 是获取到的蓝牙设备的名称, 因为蓝牙设备在安卓和苹果手机上搜到的蓝牙地址显示是不一样的,所以根据设备名称匹配蓝牙/

```js

getBluetoothDevices() {

    var that= this;

    setTimeout(() => {

wxgetBluetoothDevices({

            services: [],

            allowDuplicatesKey: false,

            interval: 0,

            success: function(res) {

                if (resdeviceslength> 0) {

                    if (JSONstringify(resdevices)indexOf(thatdeviceName) !== -1) {

                        for (let i = 0; i < resdeviceslength; i++) {

                            if (thatdeviceName === resdevices[i]name) {

/ 根据指定的蓝牙设备名称匹配到deviceId /

                                thatdeviceId = thatdevices[i]deviceId;

                                setTimeout(() => {

                                    thatconnectTO();

}, 2000);

};

};

} else {

}

} else {

}

},

            fail(res) {

                consolelog(res, '获取蓝牙设备列表失败=====')

}

})

}, 2000)

},

```

#5连接蓝牙

# 匹配到的蓝牙设备ID 发送连接蓝牙的请求, 连接成功之后 应该断开蓝牙搜索的api,然后去获取所连接蓝牙设备的service服务

```js

connectTO() {

wxcreateBLEConnection({

        deviceId: deviceId,

        success: function(res) {

            thatconnectedDeviceId = deviceId;

/ 4获取连接设备的service服务 /

thatgetBLEDeviceServices();

wxstopBluetoothDevicesDiscovery({

                success: function(res) {

                    consolelog(res, '停止搜索')

},

                fail(res) {

}

})

},

        fail: function(res) {

}

})

}

```

#6 获取蓝牙设备的service服务,获取的serviceId有多个要试着连接最终确定哪个是稳定版本的service 获取服务完后获取设备特征值

```js

getBLEDeviceServices() {

    setTimeout(() => {

wxgetBLEDeviceServices({

            deviceId: thatconnectedDeviceId,

            success: function(res) {

                thatservices= resservices

/ 获取连接设备的所有特征值 /

thatgetBLEDeviceCharacteristics()

},

            fail: (res) => {

}

})

}, 2000)

},

```

#7获取蓝牙设备特征值

# 获取到的特征值有多个,最后要用的事能读,能写,能监听的那个值的uuid作为特征值id,

```js

getBLEDeviceCharacteristics() {

            setTimeout(() => {

wxgetBLEDeviceCharacteristics({

                    deviceId: connectedDeviceId,

                    serviceId: services[2]uuid,

                    success: function(res) {

                        for (var i = 0; i < rescharacteristicslength; i++) {

                            if ((rescharacteristics[i]propertiesnotify || rescharacteristics[i]propertiesindicate) &&

                                (rescharacteristics[i]propertiesread && rescharacteristics[i]propertieswrite)) {

                                consolelog(rescharacteristics[i]uuid, '蓝牙特征值 ==========')

/ 获取蓝牙特征值 /

                                thatnotifyCharacteristicsId = rescharacteristics[i]uuid

// 启用低功耗蓝牙设备特征值变化时的 notify 功能

thatnotifyBLECharacteristicValueChange()

}

}

},

                    fail: function(res) {

}

})

}, 1000)

},

```

#8启动notify 蓝牙监听功能 然后使用 wxonBLECharacteristicValueChange用来监听蓝牙设备传递数据

#接收到的数据和发送的数据必须是二级制数据, 页面展示的时候需要进行转换

```js

notifyBLECharacteristicValueChange() { // 启用低功耗蓝牙设备特征值变化时的 notify 功能

            var that= this;

            consolelog('6启用低功耗蓝牙设备特征值变化时的 notify 功能')

wxnotifyBLECharacteristicValueChange({

                state: true,

                deviceId: thatconnectedDeviceId,

                serviceId: thatnotifyServicweId,

                characteristicId: thatnotifyCharacteristicsId,

                complete(res) {

/用来监听手机蓝牙设备的数据变化/

wxonBLECharacteristicValueChange(function(res) {

//

                        thatbalanceData += thatbuf2string(resvalue)

                        thathexstr += thatreceiveData(resvalue)

})

},

                fail(res) {

                    consolelog(res, '启用低功耗蓝牙设备监听失败')

                    thatmeasuringTip(res)

}

})

},

/转换成需要的格式/

buf2string(buffer) {

                    var arr = Arrayprototypemapcall(new Uint8Array(buffer), x => x)

                    return arrmap((char, i) => {

                        return StringfromCharCode(char);

                    })join('');

},

receiveData(buf) {

return thishexCharCodeToStr(thisab2hex(buf))

},

/转成二进制/

ab2hex (buffer) {

              var hexArr = Arrayprototypemapcall(

                  new Uint8Array(buffer), function (bit) {

                      return ('00' + bittoString(16))slice(-2)

}

)

              return hexArrjoin('')

},

/转成可展会的文字/

hexCharCodeToStr(hexCharCodeStr) {

              var trimedStr = hexCharCodeStrtrim();

              var rawStr = trimedStrsubstr(0, 2)toLowerCase() === '0x' trimedStrsubstr(2) : trimedStr;

              var len = rawStrlength;

              var curCharCode;

              var resultStr= [];

              for (var i = 0; i < len; i = i+ 2) {

                  curCharCode = parseInt(rawStrsubstr(i, 2), 16);

                  resultStrpush(StringfromCharCode(curCharCode));

}

              return resultStrjoin('');

},

```

# 向蓝牙设备发送数据

```js

sendData(str) {

    let that= this;

    let dataBuffer = new ArrayBuffer(strlength)

    let dataView = new DataView(dataBuffer)

    for (var i = 0; i < strlength; i++) {

        dataViewsetUint8(i, strcharAt(i)charCodeAt())

}

    let dataHex = thatab2hex(dataBuffer);

    thiswriteDatas = thathexCharCodeToStr(dataHex);

wxwriteBLECharacteristicValue({

        deviceId: thatconnectedDeviceId,

        serviceId: thatnotifyServicweId,

        characteristicId: thatnotifyCharacteristicsId,

        value: dataBuffer,

        success: function (res) {

            consolelog('发送的数据:' + thatwriteDatas)

            consolelog('message发送成功')

},

        fail: function (res) {

},

        complete: function (res) {

}

})

},

```

# 当不需要连接蓝牙了后就要关闭蓝牙,并关闭蓝牙模块

```js

// 断开设备连接

closeConnect() {

if (thatconnectedDeviceId) {

wxcloseBLEConnection({

            deviceId: thatconnectedDeviceId,

            success: function(res) {

thatcloseBluetoothAdapter()

},

            fail(res) {

}

})

} else {

thatcloseBluetoothAdapter()

}

},

// 关闭蓝牙模块

closeBluetoothAdapter() {

wxcloseBluetoothAdapter({

        success: function(res) {

},

        fail: function(err) {

}

})

},

```

#在向蓝牙设备传递数据和接收数据的过程中,并未使用到read的API 不知道有没有潜在的问题,目前线上运行为发现任何的问题

#今天的蓝牙使用心得到此结束,谢谢

Android M动态申请获取权限androidpermissionREAD_PHONE_STATE

​ 要获取权限进行 *** 作的Activity实现 ActivityCompatOnRequestPermissionsResultCallback接口(这一步貌似不是必须):

​ 其中REQUEST_READ_PHONE_STATE 是自定义的类常量,可以像下面这样在activity中定义:

public final static int REQUEST_READ_PHONE_STATE = 1;

重写onRequestPermissionsResult()方法,对权限申请结果做处理:

最近在做一个移动端的项目,项目出现的一大堆兼容问题是在让我头疼,其中就包括获取 当前使用的 ios 的 机型。逛了很多圈博客,很多是用了组件实现的,也不知道是我方法没用对还是怎么回事,我用的组件只能获取到安卓手机的机型,最后只能采用比较笨的方法了,根据苹果手机的像素比和分辨率进行区分,代码如下:

/

设备的像素比和设备分辨率表如下:

iPhone 3GS 35寸 => 320x480 => 1

iPhone 4/4s 35寸 => 320x480 => 2

iPhone 5/5s/5c 40寸 => 320x568 => 2

iPhone 6 47寸 => 375x667 => 2

iPhone 6Plus 55寸 => 414x736 => 3

iPhone 6s 47寸 => 375x667 => 2

iPhone 6sPlus 55寸 => 414x736 => 3

iPhone 7 47寸 => 375x667 => 2

iPhone 7Plus 55寸 => 414x736 => 3

iPhone 8 47寸 => 375x667 => 2

iPhone 8Plus5 55寸 => 414x736 => 3

iPhone X 58寸 => 375x812 => 3

iPhone XS 58寸 => 375x812 => 3

iPhone XS Max65寸 => 414x896 => 3

iPhone XR 61寸 => 414x896 => 2

/

let iPhone4_4s = windowdevicePixelRatio && windowdevicePixelRatio === 2 && windowscreenwidth === 320 && windowscreenheight === 480

let iPhone5_5s_5c = windowdevicePixelRatio && windowdevicePixelRatio === 2 && windowscreenwidth === 320 && windowscreenheight === 568

let iPhone6_6s_7_8 = windowdevicePixelRatio && windowdevicePixelRatio === 2 && windowscreenwidth === 375 && windowscreenheight === 667

let iPhone6P_6sP_7P_8P = windowdevicePixelRatio && windowdevicePixelRatio === 3 && windowscreenwidth === 414 && windowscreenheight === 736

接下来的机型大家可以根据上面的注释写下去,这里我只判断到了iphone8

打开CSDN,阅读体验更佳

iphone 屏幕大小及计算_杨宗卫的爸爸的博客_苹果屏幕

从分辨率的角度来看,iPhone6沿用二倍图(@2x),但需为iPhone6+提供更高的三倍图(@3x);从屏幕尺寸角度来看,需要重新对UI元素尺寸和布局进行适配,以期视觉协调。 (1)按宽度适配 我们先来看一下iPhone4~6(+)的屏幕高宽比: iPhone4(

js判断ipad还是安卓_JS判断客户端是否是iOS或者Android或者ipad(二

判断方法:粗略判断只检索 "iphone"和"safari/"字符串,严格判断则要同时包含 "mozilla/","iphone","mobile/","safari/"四个字符串 iPhone版Opera Mobile: 特征表现: 以"opera/"开头,含有"iphone"字符串,同时含有 "opera mini/","

JavaScript 判断iPhone X Series机型的方法

写在前面 如果有更优雅的方式,一定要告诉我! 现状 iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容。 现状对于 iPhone X 的判断基本是这样的: // h5 export const isIphonex = () => /iphone/gitest(navigatoruserAgent) && windowscreen && (windowscreenheight === 812 && windowscreenwidth === 375); 这在之前是没问题的,新的 iPhone X Series 设备发布之后,这个就会兼容就有问

swift 含iPhone14系列 具体机型判断(最新最全)

public extension UIDevice { var modelName: String { var systemInfo = utsname() uname(&systemInfo) let machineMirror = Mirror(reflecting: systemInfomachine) let identifier = machineMirrorchildrenreduce("") {

继续访问

H5页面适配所有iPhone和安卓机型的六个技巧_曲小强的博客

img标签的高清化,可以通过JS判断devicePixelRatio的值来加载不同尺寸的,但是对于背景图,写在CSS中的,用JS来判断就略麻烦了,还好CSS通过media query也能判断dpr。 目前兼容性最好的背景图高清化实现方式,使用media query的-webkit-mi

如何获取当前设备的机型(更新到iPhoneX)判断机型是否为iPhone X

判断机型是否为iPhone X,首先想到的是判断当前设备的机型,另外也可以从他的固有尺寸去判断: #define KIsiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UI

最新发布 JS判断是否是ioS或者Android

JS判断是否是ioS或者Android

继续访问

js判断苹果ios各类机型

首先需要得到设备像素比/设备分辨率(根据下面设备表去判断) / iPhone 3GS35吋320x480@1x320x480 iPhone 4/4s35吋320x480@2x640x960 iPhone 5/5s/5c40吋320x568@2x640x1136 iPhone 647吋375x667@2x750x1334 iPhone 6Plus55吋414x736@3x1242x2208 iPhone 6s47吋375x667@2x750x1334 iPhone 6sPlus55吋414x7

继续访问

移动开发屏幕适配分析_weixin_34205076的博客

iPhone 3GS(非Retina屏幕)iPhone 4(Retina屏幕) 右边的明显要比左边的清晰,这是因为PPI要高,何为PPI。 1)PPI与DPI PPI和DPI这两个是密度单位,不是度量单位。 1 PPI(pixels per inch):图像分辨率 (在图像中,每英寸所包含的

100个原生的JavaScript实用功能代码片段_唐策的博客

40、原生JavaScript获取移动设备屏幕宽度 41、原生JavaScript完美判断是否为网址 42、原生JavaScript根据样式名称检索元素对象 43、原生JavaScript判断是否以某个字符串开头 44、原生JavaScript判断是否以某个字符串结束

iPhone12机型判断

iPhone12机型判断 case "iPhone13,1" : return "iPhone 12 mini"; case "iPhone13,2" : return "iPhone 12"; case "iPhone13,3" : return "iPhone 12 Pro"; case "iPhone13,4" : return "iPhone 12 Pro Max";

继续访问

iphonex系列机型判断

iphonex xs xr xsmax 判断 // iphonex xs xr xsmax 判断 export function isIphonX() { // iPhone X、iPhone XS var isIPhoneX = /iphone/gitest(windownavigatoruserAgent) && windowdevicePixelRat

继续访问

iPhone~iPhone14屏幕尺寸和分辨率的相关知识 ( DPI vs PPI pt vs px

iPhone 4和iPhone 3GS的屏幕尺寸实际上是一样的,都是35英寸。在屏幕上同样一个点,实际尺寸大小一样,只是在iPhone 4上单位英寸内的像素点更多,看起来更加细腻。 4 iPhone 6/6s Plus分辨率是1242 x 2208,为什么渲染后分辨率变为1080

纯JS判断iPhone准确机型,iPhone6~iPhoneXs Max

工作中所用到的对于iPhone各类机型的准确识别, 亲测可用,现在分享一下: //iPhone 6/6s/7/8 let isIPhone6 = /iphone/gitest(windownavigatoruserAgent) && windowdevicePixelRatio && windowdevicePixelRatio === 3 && wind

继续访问

js判断手机是否是苹果

前端开发会遇到判断设备类型是否是苹果端,记录一下js代码

继续访问

判断iPhone型号

#import <sys/utsnameh> #pragma mark -- 判断手机型号 -(NSString)judgeIphoneType { struct utsname systemInfo; uname(&systemInfo); NSString phoneType = [NSString stringWithCString: systemInfomachine encoding:NSASCIIString

继续访问

移动端:js如何判断当前的手机系统是安卓还是iOS

废话不多说,直接上代码: // 判断当前系统是ios还是安卓 let u = navigatoruserAgent; let isAndroid = uindexOf("Android") > -1 || uindexOf("Adr") > -1; //android终端 let isIOS = !!umatch(/\(i[^;]+;( U;) CPU+Mac OS X/); //ios终端 if (isAndroid) { consolelog('安卓手机') } i

继续访问

Javascript 识别iPhone、Android移动手机

通过userAgent简单识别访问设备类别

继续访问

html获取手机型号,前端通过js获取手机型号

###前段通过js获取手机型号需求:用户登录后记录当前的手机型号并记录插件:使用步骤:获取UA信息->根据安卓和IOS不同的处理IOS再通过插件mobile-device-js去获取型号安卓通过解析UA信息去获取build之前的信息得到手机型号//引入插件//获取userAgent信息var user_agent = navigatoruserAgent;consolelog(user_

继续访问

原生js判断iPhoneX系列手机型号

#原生js判断iPhoneX系列手机型号 static isIphone() { return /iphone/gitest(windownavigatoruserAgent) } static isIphonXSeries() { if (window !== 'undefined' && window && !thisisIphone()) return false; const xSeriesConfig = [ {

继续访问

ios在判断设备是ipad_使用JS判断设备终端是iPhone、iPad或者电脑(PC)

今天在做一个轮播广告的项目,轮播广告上有两个特效:第一就是鼠标经过变亮,再就是点击图会切换成文字描述的层且覆盖。通常这样的效果在PC端没什么问题的,但是到IPAD上面就会需要点击两下才能切换,所以我想了想,有没有办法让ipad上只执行点击的JS代码,而不执行滑动的代码,于是就想到了“用JS判断终端设备”来解决这个问题,下面就分享下方法:iPad 使用的是 Safari Mobile 浏览器

继续访问

JS判断是苹果系统(ios)还是安卓系统(Android)或者PC端

前言 今天看到一道面试题,JS判断是否是苹果系统(ios)和安卓系统(Android)客户端,一下就涉及到自己的知识盲区,赶紧亡羊补牢一下。顺便在拓展一下是pc还是移动端?pc端的话,又是在什么浏览器运行? JS判断是否是苹果系统(ios)和安卓系统(Android)客户端? <--!通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端。代码如下--> <script type="text/javascript"> var u = na

继续访问

js判断手机机型

function judgeBrand(sUserAgent) { var isIphone = sUserAgentmatch(/iphone/i) == "iphone"; var isHuawei = sUserAgentmatch(/huawei/i) == "huawei"; var isHonor = sUserAgentmatch(/honor/i) == "honor"; var isOppo = sUserAgentmatc

继续访问

iOS Swift 判断手机机型 已更新 至iPhone12

/// 扩展UIDevice extension UIDevice { /// 获取设备具体详细的型号 var modelName: String { var systemInfo = utsname() uname(&systemInfo) let machineMirror = Mirror(reflecting: systemInfomachine) let ide

继续访问

移动端判断是android还是ios

多端开发

继续访问

热门推荐 史上最简单,js并获取手机型号

js获取手机型号

继续访问

js 根据屏幕尺寸判断是否为iphone14

前端

javascript

写评

JS-SDK是微信公众号的开发工具包之一,可以在网页中嵌入微信登录、分享、支付等功能。但是,JS-SDK并不能直接获取用户的手机号。如果需要获取用户手机号,需要在微信支付中开启相关的手机号授权接口,并且需要用户授权同意之后才能获取。具体实现可以参考微信支付相关的API文档及对应的开发文档。同时,开发者需要注意在获取用户手机号等敏感信息时,需要满足微信开放平台的相关规定和审核要求,保护用户隐私。

1、点击XCode的菜单-Windows->Organizer。

2、直接复制、粘贴,就可以得到iPhone手机的UUID了。

UUID (Universally Unique Identifier)是一个软件建构的标准,是通用唯一识别码的意思。UUID被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。

UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。

目前最广泛应用的UUID,即是微软的Microsoft'sGloballyUniqueIdentifiers(GUIDs),而其他重要的应用,则有Linuxext2/ext3档案系统、LUKS加密分割区、GNOME、KDE、MacOSX等等。

以上就是关于微信小程序蓝牙教程--完整版亲测全部的内容,包括:微信小程序蓝牙教程--完整版亲测、Android之获取手机UUID、js判断iphone14等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9764481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存