0x00 写在前面
家里购入了一台小爱音箱,但是小爱音箱只提供了 QQ 音乐服务,而当我想要听网易云的时候,就必须手动连接到小爱音箱,然后再播放音乐。这样显然非常麻烦。
而前段时间,小米提供了一个解决方案,就是使用一个 NFC 标签贴在音箱上,手机扫描这个 NFC 标签时,就会自动连接到音响并播放歌曲。
![就是这个小米碰碰贴](https://maronyea.me/wp-content/uploads/2020/10/AA5CAD29-FFF3-4C39-B4A3-5DF8CCDF29E5.jpeg)
但是这个解决方案存在限制,只有部分机型才能够实现这样的功能。于是本文尝试利用 Tasker 来实现类似的功能,当手机扫描到某个 NFC 标签时,自动连接至小爱音箱。
0x01 制作 NFC 标签
为了实现预期的功能,首先需要准备一些空白的 NFC 贴纸。这种贴纸在淘宝上很多,也非常便宜,一般一张也才一块钱左右。我买的是 NFC 芯片为 NTAG213 的纯白色的贴纸。因为小爱音箱也是白色的,贴上去不会那么违和。
![这种白色圆形的NFC贴纸一般1块钱一张](https://maronyea.me/wp-content/uploads/2020/10/3E15369F-30C2-47BD-B5EC-41B7183A12EE-scaled.jpeg)
有了贴纸,就可以让手机扫描到 NFC 贴纸中的内容了。但是刚买来的贴纸里面都是空白的,所以要写入一些内容,这样方便手机分辨不同的贴纸。
这里我们使用 NFC Tools 这款应用向 NFC 贴纸写入内容。
![可以在 Google Play 下载安装 NFC Tools](https://maronyea.me/wp-content/uploads/2020/10/2E4F92CF-23C3-477D-BD9B-C74FA6BA7E80.jpeg)
下载并安装了 NFC Tools 这款应用后,打开应用就能看到如下图所示的界面。制作 NFC 标签主要用到「读」和「写」这两个选项卡。当应用处于「读」选项,且手机扫描到 NFC 标签时,就会看到下图中间所示的 NFC 标签界面。
![NFC Tool应用界面](https://maronyea.me/wp-content/uploads/2020/10/2F212556-872E-4E01-AF43-6D7E8BE5F1A2.png)
不过现在「读」是没什么意义的,只是检测一下 NFC 标签正不正常。一般看到「可写」的值为「是」的话就行。现在把 NFC 标签挪开,点击进入应用中的「写」选项卡,点击界面中的「添加记录」。
添加记录的类型非常多,不过这里选择最简单的「文本」就行。在输入框中输入「小爱同学」,点击 OK,这时就可以准备写入了。
![选择「文本」,输入「小爱音箱」](https://maronyea.me/wp-content/uploads/2020/10/BDC22562-725F-42B9-945C-47D8138482ED.png)
点击应用界面中的「写 / 19字节」按钮,就会弹出下图所示的界面。这时候扫描一下 NFC 标签,就成功实现写入了。
![靠近 NFC 标签就会自动写入标签内容](https://maronyea.me/wp-content/uploads/2020/10/A7A5EFA5-EC83-4A09-A069-687029243B18.png)
现在看看写入的内容,切换回「读」选项卡,拉到最下面,可以看到多出了一个「记录0」,内容就是刚刚设置的「小爱同学」。这样,一张用于扫描的 NFC 标签就做好了。
![最下面多出了一个「记录0」](https://maronyea.me/wp-content/uploads/2020/10/FE6032AE-062D-4602-AAF8-548AFABC8808.png)
0x02 实现连接与断开蓝牙音箱的功能
接下来要通过 Tasker 实现连接与断开蓝牙音箱的功能。我不光希望扫描标签后可以连接,我还希望当处于连接状态时再扫描一次标签就自动断开连接。所以,就需要先想办法判断是否连接到了蓝牙音箱,再由 NFC 触发,实现连接或断开蓝牙音箱的功能。
这样一来,就有了两种方案:
- 在连接或断开蓝牙时,判断蓝牙音箱的连接状态。但是 Tasker 本身没有提供这样的功能,只能借助官方的一个名为 AutoTools 的插件。但这个插件是付费的,而且扫描蓝牙连接状态的速度很慢,要好几秒才能扫描出来;
- 创建两个配置文件和两个任务,其中一个配置文件和任务负责检测是否连接到了蓝牙音箱,并记录手机和蓝牙音箱是否连接;另一个任务负责连接或断开蓝牙音箱,剩下来的那个配置文件则用来检测 NFC 标签。
我选择的方案为后者,因为这种方案速度比较快,而且不用多买一个应用,还能减少运行在后台的程序数量。
所以接下来就是创建两个配置文件和两个任务。再用图梳理一下这两个配置文件和两个任务之间的关系和作用:
![两个配置文件和两个任务之间的关系与作用](https://maronyea.me/wp-content/uploads/2020/10/AE9ADFF8-DDAE-4A2A-ADBE-DEB20CD8DC69.png)
第一个任务:标记蓝牙音箱连接状态
首先创建第一个任务,也就是标记连接状态为变量 %MIAI_CONN
。第一步就是判断 %bt_connected
这个变量是否为 true
。这个变量可以检测符合某个条件的蓝牙设备是否已经连接。如果已连接,这个变量的值就是 true
,否则的话就是 false
。
![判断 %bt_connected 是否为 true](https://maronyea.me/wp-content/uploads/2020/10/D6718363-A1A3-460E-8312-AE354B8EDE40.png)
这里多说一句,就是在 Tasker 中,变量名的大小写是有讲究的。大写的变量名属于「全局变量」,也就是说不管是哪个任务,统统都能读取到这个变量的值,比如上一篇文章中的
%SMSRB
变量就是由 Tasker 提供的全局变量,这样所有任务都能读取到最近一条短信;而小写的变量是「局部变量」,这种变量就只能在某个任务内读取,不能被其他任务读取。这里创建的
%MIAI_CONN
也是一个全局变量。正是因为它是全局变量,所以可以让两个任务之间传递信息,一个任务负责写入蓝牙连接状态,另一个任务则读取蓝牙连接状态。
第二步是将 %MIAI_CONN
的值设为 1
,这样就表示已经连接到了蓝牙音箱;
第三步是「Else If」;
第四步是将 %MIAI_CONN
的值设为 0
,这样就表示已经断开与蓝牙音箱的连接;
第五步是「End If」。
完整的步骤如下图所示。
![第一个任务的完整步骤](https://maronyea.me/wp-content/uploads/2020/10/51776D9F-DD9F-414F-990F-226310A6891D.png)
第一个配置文件:检测蓝牙音箱是否连接
创建一个配置文件,触发的条件选择「事件」→「网络」→「BT Connection」,拉到页面最底下,在「名称」中填入蓝牙音箱的设备名称。比如我的蓝牙音箱设备名就叫「小爱音箱-3078」。
![选择「事件」→「网络」→「BT Connection」](https://maronyea.me/wp-content/uploads/2020/10/BA0F293D-8E69-4FC1-9872-6C057C6DB2F0.png)
点击返回,就会弹出配置文件对应的任务列表,选择刚才创建的任务就行。这样就实现了检测蓝牙音箱是否已经与手机连接,并且会将连接状态保存到变量 %MIAI_CONN
这个变量中。如果连接了,这个变量值就是 1
,否则就是 0
。
第二个任务:根据连接状态连接到蓝牙音箱
再创建一个任务,这个任务就是根据 %MIAI_CONN
变量的值来连接或断开连接。
第一步是「If」,判断 %MIAI_CONN
的值是否为 0
,也就是没有连接到蓝牙音箱;
第二步就是连接到蓝牙音箱,选择「网络」→「Bluetooth Connection」,操作选择「Connect」,Device 填蓝牙音箱的设备名即可;
第三步是「Else If」;
第四步是断开与蓝牙音箱的连接,和第二步基本相同,但是把操作改为「Disconnect」;
第五步是「End If」。
![连接到蓝牙音箱或断开连接](https://maronyea.me/wp-content/uploads/2020/10/F888983C-8817-40D7-AD0D-95AC32B3143E.png)
完整的步骤如下:
![](https://maronyea.me/wp-content/uploads/2020/10/23D6FB6B-81BA-432F-8157-BEB257E2EEBE.png)
这时可以试着点击左下角的三角形按钮「▶︎」,如果运行正常的话,点一下,蓝牙音箱会提示「蓝牙已连接」;再点一下,又提示「蓝牙已断开」;再点一下,又提示「蓝牙已连接」……如此循环。
0x03 将 NFC 贴纸作为触发条件
现在就是创建最后一个配置文件了,这个配置文件选择「事件」→「网络」→「NFC Tag」,然后在「内容」中填上 NFC 标签中的内容。如果不记得 NFC 标签里的内容或者不确定的话,也可以点击右边的「?」搜索符号,然后扫描一下 NFC 标签,就会自动填入该标签的内容了。
![选择「事件」→「网络」→「NFC Tag」](https://maronyea.me/wp-content/uploads/2020/10/85B2B47F-A959-41EB-AC74-7EA42B73AEF0.png)
将配置文件的对应任务设置为上面的第二个任务,现在再测试一下,应该就能扫描 NFC 标签连接蓝牙音箱,再扫描一次断开连接了。
0xFF 写在后面
这一篇文章要比上一篇简单不少,毕竟不用涉及多少网络服务的操作以及代码相关的内容,但是通过这一篇文章,可以基本了解如何实现跨任务的信息传递以及蓝牙、NFC 的使用。
除了实现主动连接至蓝牙音箱以外,其实也可以稍微改进一下,比如可以实现一个简单的蓝牙报警器——当断开了某个蓝牙设备的连接时发出提醒,例如手环啊耳机啊电脑等等,都可以通过检测蓝牙连接状态来实现。甚至于可以在断开连接时记录下当前的时间、地理位置等信息。
以上就是本文的全部内容。