扫描 NFC 标签后是否可以启动应用程序?

2023-11-23

我有一个 NFC 标签。我想编写一个 Android 应用程序,当用手机扫描 NFC 标签时,该应用程序会自动启动并从 NFC 获取数据。

假设设备已打开 NFC 并且手机上没有运行其他应用程序,这应该可以工作。我发现一些应用程序可以启动另一个应用程序,但我的应用程序应该可以在没有这样的附加应用程序在后台运行的情况下工作。

有什么办法可以解决这个任务吗?


为了获得您的应用程序(实际上activity)在扫描标签时开始,您需要将适当的意图过滤器添加到您的应用程序清单中。

如果您只想为任何标签启动您的应用程序,TECH_DISCOVERED意图过滤器是您想要使用的:

<activity ...>
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
    </intent-filter>
    <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
               android:resource="@xml/nfc_tech_filter" />
</activity>

此意图过滤器需要一个额外的 XML 资源文件,该文件定义您的应用程序应侦听的标签技术(请注意<meta-data ... /> tag outside意图过滤器)。可用的技术是命名空间中的技术android.nfc.tech.*, 现在:

  • android.nfc.tech.IsoDep
  • android.nfc.tech.MifareClassic
  • android.nfc.tech.MifareUltralight
  • android.nfc.tech.Ndef
  • android.nfc.tech.NdefFormatable
  • android.nfc.tech.NfcA
  • android.nfc.tech.NfcB
  • android.nfc.tech.NfcBarcode
  • android.nfc.tech.NfcF
  • android.nfc.tech.NfcV

要发现任何标签,您可以创建一个像这样的 XML 文件(将文件创建为xml/nfc_tech_filter.xml):

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcBarcode</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcF</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
</resources>

请注意,您不一定需要将其他技术包括在内

  • IsoDep意味着NfcA or NfcB,
  • MifareClassic暗示NfcA,
  • MifareUltralight暗示NfcA, and
  • Ndef / NdefFormatable暗示要么NfcA, NfcB, NfcF, or NfcV.

如果没有其他应用程序具有更好匹配的意图过滤器,则将触发上述意图过滤器。更好的匹配是与标签上使用的数据类型匹配。因此,举例来说,如果您的标签包含 URL(封装在 NDEF 消息中),则在 URL 上触发的应用程序将优先于您的应用程序。如果您知道标签上使用的数据类型,您还可以为这些数据类型添加过滤器。例如,要匹配任何“http://”和“https://”URL,您可以使用:

<activity ...>
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>
</activity>

同样,如果您的标记包含 MIME 类型“application/vnd.com.example”,您可以使用:

<activity ...>
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/vnd.com.example" />
    </intent-filter>
</activity>

您甚至可以为一项活动组合多个意图过滤器:

<activity ...>
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
    </intent-filter>
    <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
               android:resource="@xml/nfc_tech_filter" />

    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
        <data android:scheme="https" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="application/vnd.com.example" />
    </intent-filter>
</activity>

最后,还有一个与 NFC 相关的意图过滤器:

<intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

但是,您通常会not在清单中使用此意图过滤器。它只是作为后备措施,并且只有在没有其他应用程序触发该技术或扫描标签的数据时才会触发。因此,无需为上述内容添加已触发的意图过滤器TECH_DISCOVERED意图过滤器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扫描 NFC 标签后是否可以启动应用程序? 的相关文章

  • Espresso - 检查使用按钮按下意图打开哪个活动?

    是否可以跟踪按下某个按钮后打开了哪个 Activity 我有一个测试 其中当单击 按下按钮时 it 向服务器发送请求 直到发送请求时 它打开一个活动 验证是否执行成功在测试中 我需要检查打开的 Activity 是什么 我的测试示例 检查
  • ImageView 中的全尺寸图像

    我正在尝试在 ImageView 中绘制图像 但我希望它不缩放 并根据需要使用滚动条 我怎样才能做到这一点 现在我只有一个可绘制集作为 XML 中 ImageView 的 android src 这会自动缩放图像以适应屏幕宽度 我读到这可能
  • 如何改变android中menuItem的背景颜色?

    我正在以编程方式将菜单项添加到菜单中 我想在选择特定项目时添加背景颜色 如何为 menuItem 添加背景 您的回答将不胜感激 虽然其他答案提供了更改样式 这会影响all菜单项 据我了解 需要更改一个菜单项 我建议你使用android ac
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 更改工具栏中汉堡图标的大小?

    我有两个问题 可能很奇怪 但无论如何 我有带有应用程序标题的工具栏 如何将其更改为非徽标的图片 下一个问题 是否可以设置 更改工具栏中汉堡图标的大小 我在下面的下一个代码的帮助下制作了经典的导航抽屉 我也使用了 ActionBarDrawe
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • OpenCV InRange 参数

    我在 Android 上使用 OpenCV 来实时查找特定颜色的圆圈 我的第一步是仅保留与我正在寻找的定义颜色相对应的像素 在本例中为红色或绿色 示例图像 https i stack imgur com CIozU jpg 为此 我正在使用
  • 下载图像并显示它

    应用程序的主要目的是下载和显示图像 但是当我尝试启动应用程序时它崩溃了 这是我的代码 private DownloadImageTask task protected void onCreate Bundle savedInstanceSt
  • 6:需要显示BuyFlow UI

    There is a problem when i am click on payWithGoogle Button I am implementing Google Pay in my Android Application and wh
  • Flutter / FireStore:如何在 Flutter 中显示 Firestore 中的图像?

    我想将我在应用程序中使用的一些图像放入 Firestore 并从那里显示它们 而不是将它们作为资产捆绑在我的应用程序中 为了做到这一点 我想出了以下解决方案 对于我想要显示图像的项目 我创建了一个 Firebase 文档 其中有一个字段存储
  • 当参数具有默认值时,为什么无法使用导航组件将参数传递给片段?

    我正在使用导航组件 但我不明白为什么如果定义了参数 则将参数传递给下面的方法时会出现错误 我正在使用 SafeArgs 只有当我为此参数定义默认值时才会出现此错误 有人可以解释一下为什么会发生这种情况以及如何解决它吗 这是导航图的部分代码
  • 在 Android 中使用 iText 读取或打开 PDF 文件

    我是 Android 应用程序开发新手 使用 iText 我完成了 PDF 创建并在创建的文件上写入 现在我想阅读该 PDF 文件 如何使用 iText 打开或阅读 PDF 文件 例子将是可观的 那么提前 哪个是渲染 PDF 文件的最佳库
  • 手动启用时 Firebase Crashlytics 不报告崩溃

    Crashlytics 在没有选择加入报告的情况下也能正常工作 但一旦我根据规定设置了选择加入报告 它就会停止报告任何内容tutorial https firebase google com docs crashlytics customi
  • onTouchEvent()中如何区分移动和点击?

    在我的应用程序中 我需要处理移动和单击事件 一次点击是由一个 ACTION DOWN 操作 多个 ACTION MOVE 操作和一个 ACTION UP 操作组成的序列 理论上 如果您收到 ACTION DOWN 事件 然后收到 ACTIO
  • 更改android中禁用按钮的颜色

    有没有办法通过样式或其他形式更改 android 中禁用按钮的颜色 我目前有以下内容 可绘制 button default xml
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • 如何在 WebView 中添加 JavaScript 函数并稍后在提交 reCAPTCHA 时从 HTML 调用它

    我在 WebView 中添加一个 JavaScript 函数 如下所示 Kotlin val webView findViewById R id webview as WebView webView getSettings setJavaS
  • 如何更改锁屏自定义文本(所有者信息)?

    我写了程序代码 String message This is test Settings System putString context getContentResolver Settings Secure LOCK PATTERN EN
  • Android:如何通过右侧的十字按钮清除EditText

    我创建了一个EditText用于搜索 左侧包含搜索图标 右侧包含图标
  • ormlite 将日期读取为 'yyyy-MM-dd'

    我需要读取给我的 sqlite 数据库 因此我无法更改表中的日期格式 yyyy MM dd 当我尝试使用 ormlite 为我生成对象时 使用以下注释 DatabaseField columnName REVISION DATE dataT

随机推荐

  • initializer_list 不可变性质导致过度复制

    为什么可以访问std initializer list不允许我们更改其内容 这是一个很大的缺点std initializer list当将它用于其主要目的 初始化容器 时 因为它的使用会导致过多的复制构造 复制赋值 而不是移动构造 移动赋值
  • 将图形导出为 PDF 时,可以导出绘图标签中的特殊符号/西里尔字母吗?

    我正在尝试将图形列表导出为 PDF 格式的单独帧 以便随后借助外部实用程序 例如 pdf2swf 编译矢量 SWF 动画 不幸的是 导出的 PDF 文件中的一些特殊字符 例如度数符号或三点 被损坏 这也是所有俄语字母的命运 请注意 当直接从
  • 如何让线条动画更流畅?

    我正在用 Java 制作一个简单的动画 并试图使其尽可能流畅 我仅使用每个 Shape 对象的 Double 内部类 并在 Graphics2D 对象中设置抗锯齿功能 只要我只使用 fill 方法 这一切都有效 但如果我还使用 draw 方
  • 致命错误:无法将 User 类型的对象用作数组

    应用程序上的用户通过电子邮件登录 此电子邮件处于会话中 通过此会话 我尝试获取该用户的更多信息 以打印出该用户的 姓氏 姓名和头像 当我在导航栏中执行此操作时 他做得很好 但在页面本身上却出现以下错误 致命错误 无法将 User 类型的对象
  • 如何重新安装 base-R 软件包(例如统计数据、图形、实用程序等)?

    我一直在 R 3 0 1 中使用 stats 包 没有任何问题 但今天我从 R 库位置删除了 stats 文件夹 现在我无法再安装它了 我尝试对其他软件包执行相同的操作 但我可以安装除 stats 之外的所有内容 install packa
  • 对于 64 位进程,kb 显示什么?

    我最近在分析调用堆栈时犯了一个错误 因为我没想到该应用程序是 64 位的 我使用了WinDbg命令kb显示调用堆栈和传递给方法的参数 在 64 位上 参数不是通过堆栈传递 而是通过寄存器 RCX RDX R8 和 R9 传递 看来WinDb
  • NSAttributedString 对齐不适用于 html 内容

    想要更改 html 标签的对齐方式 什么都不起作用 我在 HTML 中没有看到任何 CSS 没有其他设置可以更改对齐方式 我还直接在 UILabel 上设置左对齐 我缺少什么 代码位于 UILabel 扩展中 NSMutableParagr
  • VBA-SQL 对 Excel 工作表进行更新/插入/选择

    简而言之 我正在为我的客户制作一个调度程序 由于限制 它需要位于单个 Excel 文件中 尽可能小 因此 一个工作表充当 UI 而任何其他工作表将充当表格或设置 我正在尝试使用 SQL 我是新手 来处理单个工作表 名为 TblEmpDays
  • malloc 是否会在 Linux(和其他平台)上延迟创建分配的支持页面?

    如果我要在 Linux 上malloc 1024 1024 1024 malloc 实际上做了什么 我确信它会为分配分配一个虚拟地址 通过遍历空闲列表并在必要时创建新映射 但它实际上会创建 1 GiB 的交换页吗 或者是这样mprotect
  • 如何在运行时分配 ToolButton 的 OnClick 事件?

    我在设计时创建了一个没有工具按钮的 TToolBar 我的想法是在运行时创建 ToolButtons 并在创建表单时将它们放在那里 只是为了向用户显示打开了哪些表单 而无需在主菜单中打开 Windows 菜单 我有一个名为 Navigati
  • 外部模块中的模式在 Node.js 中不起作用

    我非常头疼尝试通过一个模块将一些常见的模式定义共享给我的代码库中的所有其他模块 我有一个 myproj schemas 模块 其中包含这两个模式 var mongoose require mongoose util require util
  • 使用 Bullet 和 RSpec gem 减少 n+1 查询

    将 Bullet Gem 与 RSpec 结合使用的有效方法是什么 现在 我觉得如果我将它与当前的单元测试框架一起使用 我会收到很多通知或测试失败 因为测试本身中的 n 1 查询与我的生产应用程序中发生的情况无关 例如检查值或关联 因此 修
  • 如何从 SQL 数据库流式传输 .flv 文件

    我想将 flv 文件存储在数据库中而不是文件系统中 这就是我现在可以做的 使用 ffmpeg 成功将 wmv 和 mpeg 转换为 flv 将图像存储在 SQL Server 中并使用 httphandler 在我的页面上显示它们 与 av
  • Java 计算整数数组中每个元素的出现次数

    我编写了以下代码片段来计算每个元素出现的次数 是否有可能以更短的方式实现这一目标 int arr 1 6 2 8 5 4 7 7 5 7 Arrays stream arr collect ArrayList new ArrayList a
  • 所有可用的 matplotlib 后端的列表

    当前后端名称可通过以下方式访问 gt gt gt import matplotlib pyplot as plt gt gt gt plt get backend GTKAgg 有没有办法获取可在特定机器上使用的所有后端的列表 您可以访问列
  • ASP.NET MVC - Linq to Entities 模型作为 ViewModel - 这是好的做法吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 真的是很快的问题 我目前正在使用 asp net MVC 和实体框架构建一个网站 我有几个存储库 它们返回实体或实体列表 我发现在我的大部分页面中 我必须从各种相关表中提取数据 只要我在查
  • 在 Scala 中从类型别名创建对象 [重复]

    这个问题在这里已经有答案了 如何从 scala 中的类型别名构造一个对象 type MyType List Int println List Int println MyType error not found value MyType 这
  • MongoDB 查找日期范围是否与其他日期重叠

    我有许多文档 其架构如下所示 每个文档都包含 开始日期 结束日期 如下架构所示 有没有一种简单的方法可以在保存新文档之前知道新文档的开始日期 结束日期是否会与以前保存的文档开始日期 结束日期重叠 谢谢 title owner notes s
  • ElasticSearch:禁用 Groovy 时对 _score 字段进行聚合

    我见过的每个例子 例如 ElasticSearch 在 score 字段上聚合 用于对 score 字段进行聚合或与 score 字段相关的聚合似乎需要使用脚本 由于 ElasticSearch 出于安全原因默认禁用动态脚本 有没有什么方法
  • 扫描 NFC 标签后是否可以启动应用程序?

    我有一个 NFC 标签 我想编写一个 Android 应用程序 当用手机扫描 NFC 标签时 该应用程序会自动启动并从 NFC 获取数据 假设设备已打开 NFC 并且手机上没有运行其他应用程序 这应该可以工作 我发现一些应用程序可以启动另一