this.NFCAdapter.startDiscovery()
3. 册贴卡监听回调
this.NFCAdapter.onDiscovered(function callback)
4. 注销NFC适配器实例
// 取消监听 NFC Tag
this.NFCAdapter.offDiscovered(function callback)
// 停止监听贴卡
this.NFCAdapter.stopDiscovery()
// 重置 NFC 实例
this.NFCAdapter = null
1. 获取NFC适配器实例
this.NFCAdapter = wx.getNFCAdapter()
2. 开始监听贴卡
this.NFCAdapter.startDiscovery()
3. 开始监听 NFC 标签
this.NFCAdapter.onDiscovered(function callback)
4. 连接设备 NFC
const NFCTab = this.NFCAdapter.getNdef()
NFCTab.connect({
success: () => {
wx.showToast({ title: '连接设备成功' })
fail: error => {
wx.showToast({
title: '连接设备失败',
icon: 'error'
this.NFCAdapter.offDiscovered(function callback)
5. 写入数据(此处以写入uri为例,其它类型可查询官方文档)
NFCTab.writeNdefMessage({
uris: ['https://www.baidu.com'],
success: () => {
console.log('数据写入成功')
fail: () => {
console.log('数据写入失败')
complete: res => {
this.closeConnect(NFCTab)
6. 读写完毕,断开连接
function closeConnect(NFCTab) {
NFCTab.close({
complete: res => {
console.log('清除标签连接:res', res)
this.NFCAdapter.offDiscovered(function callback)
7. 注销NFC适配器实例
this.NFCAdapter.offDiscovered(function callback)
this.NFCAdapter.stopDiscovery()
this.NFCAdapter = null
1. 字节对象转字符串
export const byteToString = function (arr) {
if (typeof arr === 'string') {
return arr
var str = '',
_arr = arr
for (var i = 0; i < _arr.length; i++) {
var one = _arr[i].toString(2),
v = one.match(/^1+?(?=0)/)
if (v && one.length == 8) {
var bytesLength = v[0].length
var store = _arr[i].toString(2).slice(7 - bytesLength)
for (var st = 1; st < bytesLength; st++) {
store += _arr[st + i].toString(2).slice(2)
str += String.fromCharCode(parseInt(store, 2))
i += bytesLength - 1
} else {
str += String.fromCharCode(_arr[i])
return str
2. 字符串转字节
export const stringToArrayBuffer = function (str) {
// 首先将字符串转为16进制
let val = ''
for (let i = 0; i < str.length; i++) {
if (val === '') {
val = str.charCodeAt(i).toString(16)
} else {
val += ',' + str.charCodeAt(i).toString(16)
// 将16进制转化为ArrayBuffer
return new Uint8Array(
val.match(/[\da-f]{2}/gi).map(function (h) {
return parseInt(h, 16)
).buffer
- 微信小程序 NFC 功能暂仅支持安卓设备
- 读取 NFC 数据 uri 格式时,返回内容前缀会存在空字符(\u0000),可根据需要自行转换移除
export const removeNullCharacter = str => {
return str.replace(/\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/g, '')
完整项目源码地址
微信小程序的踩坑
逆战不停学
1、对于微信小程序开发过程中请求接口不支持http协议的情况,如网络图片地址和接口为http的情况,想要其正常显示,可通过勾选微信开发者工具右上角的详情–>本地设置–>不校验合法域名,当然为了安全起见微信开发的接口还是用https的数字认证来做为好。具体如图1所示:
图1
2、对于微信小程序引入第三方库,所遇到的效果无法出现的问题,这里具体说明一下引入的步骤,以vantweapp组件库
最近在看NFC功能,重点就是我在页面上设置了一个按钮,要点击此按钮才会开启NFC读卡功能(并非跳转下个Activity),为了方便使用,为此可以专门设置一个基类Activity作为NFC功能的管理,此处我命名为TestNfcBaseActivity
public abstract class TestNfcBaseActivity extends BaseActivity {
// pr
微信小程序自去年公测以来,我司也申请了一个帐号开发,春节前后开始开发,现在终于告一个段落了。谨以此文记录下踩过的坑。
坑1:scroll-view与onPullDownRefresh冲突
由于有几个页面需要将导航tab栏自动置顶,所以使用了scroll-view。然而又想要下拉刷新,本来想直接使用onPullDownRefresh,结果却发现下拉的时候onPullDo
微信小程序公测也有段时间了,但是里面的坑踩了一个又一个,心也是够累的。本文说说关于 wx.request 和 wx.uploadFile 对请求响应的不同表现。
wx.request
使用 wx.request 发出请求,在对接口的响应做处理时,官方提供了三个回调函数,分别是 success,fail,complete,看了官方文档,其实也很清晰什么时候用什么回调,在这里也不多赘述了。
wx.uploadFile
使用 wx.uploadFile 可以上传文件,并可以携带一些额外的信息,在对接口的响应做处理时,和 wx.request 一样,也提供了同样的三个回调函数,在官方文档中,其描述几乎
微信小程序保存历史记录可以通过以下几种方式实现:
1. 使用本地缓存:微信小程序提供了本地缓存的功能,可以使用`wx.setStorageSync`和`wx.getStorageSync`来保存和读取历史记录。你可以将历史记录以数组的形式存储在本地缓存中,每次添加新的历史记录时更新缓存。
2. 使用数据库:如果历史记录较多或需要进行复杂的查询操作,可以考虑使用微信小程序提供的云开发能力中的数据库功能。你可以创建一个历史记录的集合,并在每次添加新的历史记录时将其插入到数据库中。
3. 使用服务端接口:如果需要将历史记录保存在服务器端,可以通过调用自己搭建的接口来实现。在小程序中发送请求,将历史记录作为参数传递给接口进行保存,并在需要时通过请求获取历史记录。
以上是几种常见的保存历史记录的方式,具体选择哪种方式取决于你的需求和实际情况。
Android Studio 4.2 Plugin Error:“Android WiFi ADB” is incompatible(supported only in intelliJ IDEA).
Android Studio 4.2 Plugin Error:“Android WiFi ADB” is incompatible(supported only in intelliJ IDEA).
微信小程序使用苹方字体