当前位置: 首页 > news >正文

#如何使用 Qt 5.6 在 Android 上启用 NFC

如何使用 Qt 5.6 在 Android 上启用 NFC

NFC 技术在 Android 应用开发中变得越来越重要。在本文中,我将介绍如何使用 Qt 5.6 来实现 Android 上的 NFC 功能。这个教程基于一个创建于 8 年 8 个月前的问题,并在 7 年 3 个月前进行了修改,讨论了如何在 Android 手机上使用 Qt 的 NFC 模块读取 NFC 标签。

环境设置

根据 Qt 官方文档,从 Qt 5.6 版本开始,Qt 将支持 Android 的 NFC 功能。以下是关键步骤:

1. 从源码构建 Qt 5.6 并安装

由于 Qt 5.6 版本当时尚未正式发布,需要从源码构建并安装到 Qt Creator。可以参考 Qt 的官方构建指南 来进行构建。

2. 创建 NFC 测试应用

在 Qt 应用中,我们需要一个 QNearFieldManager 实例来处理 NFC 的检测。以下是一个简单的示例应用代码:

#include <QLabel>
#include <QVBoxLayout>
#include <QNearFieldManager>
#include <QNearFieldTarget>
#include <QDebug>
#include "window.h"Window::Window(QWidget *parent)
: QWidget(parent)
{nfcLabel_ = new QLabel(this);QVBoxLayout *mainLayout = new QVBoxLayout;mainLayout->addWidget(nfcLabel_, 1);setLayout(mainLayout);setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));setWindowTitle(tr("NFC Test"));nfc_ = new QNearFieldManager(this);if (nfc_->isAvailable()) {nfcLabel_->setText("NFC available");} else {nfcLabel_->setText("NFC not available");qWarning() << "NFC not available";}nfc_->setTargetAccessModes(QNearFieldManager::NdefReadTargetAccess); // 可选nfc_->registerNdefMessageHandler(this, SLOT(handleNdefMessage(QNdefMessage,QNearFieldTarget*))); // 可选connect(nfc_, SIGNAL(targetDetected(QNearFieldTarget*)), this, SLOT(targetDetected(QNearFieldTarget*)));connect(nfc_, SIGNAL(targetLost(QNearFieldTarget*)), this, SLOT(targetLost(QNearFieldTarget*)));if (!nfc_->startTargetDetection()) {qWarning() << "NFC target detection could not be started";}
}Window::~Window()
{nfc_->stopTargetDetection();
}void Window::targetDetected(QNearFieldTarget * /*target*/)
{nfcLabel_->setText("Target detected");
}void Window::targetLost(QNearFieldTarget *target)
{nfcLabel_->setText("Target lost");target->deleteLater();
}void Window::handleNdefMessage(const QNdefMessage &/*message*/, QNearFieldTarget */*target*/)
{qDebug() << "Ndef Message";
}

3. 修改 AndroidManifest.xml

为了在 Android 上使用 NFC,我们需要修改 AndroidManifest.xml 文件。下面是一个示例文件:

<?xml version="1.0"?>
<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto"><application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --" android:theme="@android:style/Theme.Holo"><activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter><!-- 添加此 intent-filter 以触发 targetDetected 和 targetLost 事件 --><intent-filter><action android:name="android.nfc.action.TAG_DISCOVERED"/><category android:name="android.intent.category.DEFAULT"/></intent-filter><meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/><meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/><meta-data android:name="android.app.repository" android:value="default"/><meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/><meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/><meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/><meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/><meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/><meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/><meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/><meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/><meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/><meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/><meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/><meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/><meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/></activity></application><uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"/><supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/><uses-feature android:name="android.hardware.nfc" android:required="true"/><uses-permission android:name="android.permission.NFC"/>
</manifest>

4. 解决应用启动问题

当 NFC 标签靠近设备时,应用会重新启动,这可能导致崩溃。为了解决这个问题,我们可以在 AndroidManifest.xml 中增加以下属性:

<activity ... android:alwaysRetainTaskState="true" android:launchMode="singleInstance">

5. 处理标签检测信号

确保在应用运行时处理标签检测信号,而不触发应用重新启动。

结论

通过修改和配置 AndroidManifest.xml 文件及调整代码逻辑,可以实现在 Android 上使用 Qt 5.6 成功读取 NFC 标签。如果你遇到问题,可能需要检查你的 NFC 硬件兼容性,或者为你的设备定制解决方案。希望这篇文章对你的开发工作有所帮助。如果你有其他问题或建议,欢迎留言讨论。

相关文章:

#如何使用 Qt 5.6 在 Android 上启用 NFC

如何使用 Qt 5.6 在 Android 上启用 NFC NFC 技术在 Android 应用开发中变得越来越重要。在本文中&#xff0c;我将介绍如何使用 Qt 5.6 来实现 Android 上的 NFC 功能。这个教程基于一个创建于 8 年 8 个月前的问题&#xff0c;并在 7 年 3 个月前进行了修改&#xff0c;讨论…...

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针&#xff0c;从小到大找到合并B时应该A相应位置应该插入的元素&#xff0c;因为在插入的过程中B的元素会替换A原有位置的元素&#xff0c;所以需要先将A…...

js 复制文本带样式

一键复制带样式的html文本到邮件 <div><div idcopy-content><div style{{ fontSize: 16px,fontWeight: 500, lineHeight: 24px, color: #222, marginBottom: 16px }}>邀请您参加腾讯会议网络研讨会&#xff08;Webinar)</div></div><Button …...

服务器之BIOS基础知识总结

1.BIOS是什么&#xff1f; BIOS全称Basic Input Output System&#xff0c;即基本输入输出系统&#xff0c;是固化在服务器主板的专用ROM上&#xff0c;加载在服务器硬件系统上最基本的运行程序&#xff0c;它位于服务器硬件和OS之间&#xff0c;在服务器启动过程中首先运行&am…...

FFmpeg 实现从摄像头获取流并通过RTMP推流

使用FFmpeg库实现从USB摄像头获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;拉流端使用VLC。 在Linux上查看摄像头信息可使用 v4l2-ctl 工具&#xff0c;查看命令如下&#xff1a; v4l2-ctl --device/dev/video0 --list-formats-e…...

学生管理系统

一、登录 用户类&#xff1a;属性&#xff1a;用户名、密码、身份证号码、手机号码 1、欢迎页面 System.out.println("欢迎来到学生管理系统"); System.out.println("请选择操作1登录 2注册 3忘记密码"); 代码实现&#xff1a; //欢迎页面public static…...

【linux】网络基础(3)——tcp协议

文章目录 TCP协议概括TCP头部格式TCP连接管理建立连接&#xff08;三次握手&#xff09;数据传输确认应答机制捎带应答 滑动窗口丢包问题 拥塞控制延时应达 终止连接&#xff08;四次挥手&#xff09; TCP协议概括 TCP是一个面向连接的协议&#xff0c;在传输数据之前需要建立连…...

[Day 21] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的智能合約運行機制 區塊鏈技術自比特幣誕生以來&#xff0c;便以其去中心化、安全性和透明性等特點引起了廣泛的關注和應用。而智能合約作為區塊鏈技術的一大創新&#xff0c;進一步擴展了區塊鏈的應用場景&#xff0c;使其不僅僅局限於數字貨幣&#xff0c;還可以應用…...

使用ps给gif动图抠图

目录 导入gif图片 打开时间轴 选择图片 魔棒抠图-初步抠图 套索抠图-精准抠图 导入gif图片 打开时间轴 因为gif动图实际上多张图片实现的效果&#xff0c;所以如果要给gif抠图&#xff0c;就得挨个给每个时间线的图片抠图 点击窗口->时间轴 选择图片 在时间轴上选择要…...

pmp顺利通关总结

目录 一、背景二、总结三、过程 一、背景 人活着总是想去做一些事情&#xff0c;通过这些事情来证明自己还活着。 而我证明自己还会活着并且活得很好的方式和途径&#xff0c;是通过这些东西去让自己有一个明确的边界节点&#xff1b;借此知识来验证自己的学习能力。 我坚定认…...

未来的钥匙在于过去:学历史的真正意义,震惊!历史竟然是偶然的?从历史中寻找未来的方向!

我们自幼接受的教育是&#xff0c;学历史是为了相信历史是必然的。中国人民必然战胜日寇的侵略&#xff0c;解放思想和改革开放必定会发生&#xff0c;和平和发展必定是世界的主题&#xff0c;中国经济必定是高速增长…… 然而&#xff0c;在真正的历史学家眼中&#xff0c;历史…...

ES6自定义模块

在ES6中&#xff0c;我们可以使用 export 和 import 关键字来定义和使用自定义模块。 定义模块 导出&#xff08;export&#xff09; 命名导出&#xff08;Named Exports&#xff09;&#xff1a; 使用 export 关键字来导出模块中的变量、函数、类等。例如&#xff1a; // ma…...

Windows页面错误(Page Fault)写几种c++会导致,此问题的例子

在C中&#xff0c;直接导致Windows页面错误&#xff08;Page Fault&#xff09;的情景较少直接由编程错误引发&#xff0c;页面错误更多是由操作系统在内存管理和虚拟内存机制中处理的。不过&#xff0c;某些编程错误可能导致访问违规&#xff0c;进而间接引起操作系统报告页面…...

AC7801时钟配置流程

一 默认配置 在启动文件中&#xff0c;已经对时钟进行了初始化&#xff0c;默认按外部8M晶振&#xff0c;配置系统时钟为48MHZ&#xff0c;APB为系统时钟的2分频&#xff0c;为24MHZ。在system_ac780x.c文件中&#xff0c;可以找到下面这个系统初始化函数&#xff0c;里面有Se…...

加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密&#xff08;DES/AES⇒SM4&#xff09;非对称加密&#xff08;RSA/ECC⇒SM2&#xff09;散列(摘要/哈希)算法&#xff08;MD5/SHA⇒SM3&#xff09; 在线生成公钥私钥对&#xff0c;RSA公私钥生成参考…...

读书笔记-《Spring技术内幕》(三)MVC与Web环境

前面我们学习了 Spring 最核心的 IoC 与 AOP 模块&#xff08;读书笔记-《Spring技术内幕》&#xff08;一&#xff09;IoC容器的实现、读书笔记-《Spring技术内幕》&#xff08;二&#xff09;AOP的实现&#xff09;&#xff0c;接下来继续学习 MVC&#xff0c;其同样也是经典…...

k8s及常用对象简介

文章目录 一、k8s是什么应用程序早期部署形式容器的引入k8s的作用 二、k8s中的常用对象1、Node获取node信息 2、Namespacenamespace的使用 3、Pod生命周期pod的使用 4、DaemonSetDaemonSet的使用 5、Deployment创建deploy 6、ReplicaSet7、StatefulSet创建StatefulSet 8、更新操…...

HTTPS数字证书验证论述

1 概述 网络请求方式通常分为两种&#xff0c;分别是HTTP请求和HTTPS请求&#xff0c;其中HTTP的传输属于明文传输&#xff0c;在传输的过程中容易被人截取并且偷窥其中的内容&#xff0c;而HTTPS是一种在HTTP的基础上加了SSL/TLS层&#xff08;安全套接层&#xff09;的安全的…...

【高考志愿】地质资源与地质工程

目录 一、专业概述 1.1 专业定义 1.2 主要课程 1.3 专业培养目标 二、就业前景和考研方向 三、工作特点和挑战 四、如何培养核心竞争力 五、 地质资源与地质工程专业排名 六、结语 关于高考志愿选择地质资源与地质工程专业&#xff0c;以下是一些详细的介绍和参考信息…...

全网最佳硕士研究生复试简历模板

硕士研究生复试简历模板 ✨ 简介 提供了一个适用于国内硕士研究生复试的个人简历模板。该模板通过统一的“样式”形成规范的Word格式&#xff0c;是目前研究生复试的最佳简历模板之一。模板使用“华文中宋”字体&#xff0c;如您的电脑中未安装此字体&#xff0c;请提前安装。…...

ARM PMU性能监控单元原理与实践指南

1. ARM PMU性能监控单元概述性能监控单元&#xff08;PMU&#xff09;是现代ARM处理器中用于硬件级性能分析的核心组件。它通过一组可编程的硬件计数器&#xff0c;实现对处理器内部各种关键事件的精确测量。这些事件涵盖了从指令执行、缓存访问到内存子系统行为等处理器活动的…...

taotoken如何帮助ubuntu开发者应对大模型api的频繁更新与版本迭代

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken如何帮助Ubuntu开发者应对大模型API的频繁更新与版本迭代 对于在Ubuntu环境下进行开发的工程师而言&#xff0c;大模型API…...

深度解析HS2-HF Patch:从技术框架到创作工具链的完整升级方案

深度解析HS2-HF Patch&#xff1a;从技术框架到创作工具链的完整升级方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因Honey Select 2的原版体验受…...

十年以上经验的建站公司推荐|策划强、落地稳的网站制作公司盘点

互联网时代&#xff0c;企业官网已从单纯的信息展示窗口升级为集品牌价值传递、用户体验连接与业务高效转化于一体的核心数字阵地。行业报告显示&#xff0c;优质官网可帮助企业线上转化率提升35%-60%&#xff0c;而低效官网则可能导致潜在客户大量流失。面对市场上众多的网站建…...

BetterJoy终极指南:3分钟让你的Switch手柄变身PC游戏神器

BetterJoy终极指南&#xff1a;3分钟让你的Switch手柄变身PC游戏神器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…...

天文时序数据分析:机器学习评估、半监督学习与无监督方法实战

1. 项目概述&#xff1a;当机器学习遇见星空 处理海量的天文时序数据&#xff0c;比如来自Kepler、TESS这些“巡天巨眼”的光变曲线&#xff0c;早已不是靠人眼一张张图去翻的时代了。数据量太大&#xff0c;噪声复杂&#xff0c;信号微弱&#xff0c;传统方法常常力不从心。这…...

如何高效实现Windows自动化鼠标点击:AutoClicker完整实战指南

如何高效实现Windows自动化鼠标点击&#xff1a;AutoClicker完整实战指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker AutoClicker是一款专业的Windows桌…...

H3C VSR路由器实战:用QoS策略给不同VLAN用户打DSCP标签(附配置命令详解)

H3C VSR路由器QoS实战&#xff1a;基于VLAN的DSCP标记与流量调度指南 在企业网络环境中&#xff0c;不同业务对网络质量的需求差异显著。普通办公流量可以容忍轻微延迟&#xff0c;但视频会议需要稳定的低延迟保障&#xff0c;而访客上网则可能消耗大量带宽却无需优先保障。本文…...

机器学习预测关税冲击下的股市波动:随机森林、SVR、kNN与线性回归实战对比

1. 项目概述与核心问题拆解做量化研究的朋友们&#xff0c;尤其是关注宏观事件对市场冲击的&#xff0c;应该都对“黑天鹅”事件不陌生。政策变动&#xff0c;特别是像关税这种直接影响国际贸易成本和公司利润的宏观变量&#xff0c;往往会在短期内引发市场剧烈波动。传统的做法…...

多臂老虎机算法:实现模型部署的自动化与自适应决策

1. 项目概述与核心痛点在机器学习项目的全生命周期里&#xff0c;模型部署上线从来都不是终点&#xff0c;而恰恰是真正挑战的开始。相信很多一线的算法工程师和MLOps工程师都经历过这样的场景&#xff1a;你耗费数周心血&#xff0c;在离线验证集上刷出了历史新高的AUC&#x…...