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
  1. 微信小程序 NFC 功能暂仅支持安卓设备
  2. 读取 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). 微信小程序使用苹方字体