【问题标题】:NFC tags AndroidNFC 标签 Android
【发布时间】:2014-03-27 10:52:25
【问题描述】:

我知道有很多代码可以使用安卓设备在 NFC 标签上读取或写入,但这是否可行:如果有 WiFi 连接打开此链接,否则打开另一个链接?无需构建自定义阅读器,而是使用内置阅读器?

或者我需要使用这个设备http://www.amazon.com/uFR-RFID-Reader-Writer-Programmer/dp/9896740054/ref=sr_1_8?ie=UTF8&qid=1395842599&sr=8-8&keywords=ACR122U,来应用这个吗?

【问题讨论】:

  • 您是在编写应用程序,还是只是将 URL 添加到标签中?要使其正常工作,您可能需要自己的应用来处理此问题。
  • 好的,我可以构建一个处理这个逻辑的应用程序吗?

标签: android nfc ndef


【解决方案1】:

如果您扫描包含 URL 的 NFC 标签,Android 的默认行为(除非为该 URL 注册的应用程序)是在网络浏览器中打开该 URL。此外,Android 的自动调度系统只会从标签中读取第一条 NDEF 记录(除非有可用的 AAR)。因此,默认情况下,Android 将只处理标签上的第一个 URL。

如果你想实现你想要的行为,你唯一的选择是创建你自己的应用程序(这很好,顺便说一句,否则你的问题可能在 stackoverflow 上是题外话)。

那么您的应用程序的设计可能是什么?

  1. 您将创建一个 NFC 标签,其中包含两个已知类型 URI 的 NDEF 记录,其中包含您的两个 URL。如果您的应用程序未安装在用户的设备上,其中的第一个应该指向首选 URL(在这种情况下,第一个 URL 将自动在 Web 浏览器中启动)。另请注意,第一个 URL 应该属于您(即它应该使用属于您的域名)。否则,您的应用可能会干扰使用相同 URL 的其他应用。例如

    +-------------------------------------------------+
    | WKT:URI | http://www.mroland.at/example/noWiFi  |
    +-------------------------------------------------+
    | WKT:URI | http://www.mroland.at/example/hasWiFi |
    +-------------------------------------------------+
    
  2. 如果检测到第一条记录中的 URL(在我们的例子中为 http://www.mroland.at/example/noWiFi),您将注册您的应用程序以自动启动。您可以在清单中使用这样的意图过滤器来做到这一点:

    <activity ...>
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http"
                  android:host="www.mroland.at"
                  android:pathPrefix="/example/noWiFi" />
        </intent-filter>
    </activity>
    
  3. 您的应用程序由NDEF_DISCOVERED Intent 启动,您可以检测当前的网络状态(即,如果 WiFi 可用)。如果 WiFi 可用,您将从 NFC 标签中读取第二个 NDEF 记录并发送一个意图以在 Web 浏览器中启动该 URL。否则,您将从第一条记录中获取 URL,并发送意图以在 Web 浏览器中启动此 URL。

【讨论】:

  • 非常感谢,但还有一个问题,我可以将该逻辑(wifi 或 3G)添加到 NFC 标签而不是使用阅读器应用程序吗?
  • 你不能。我认为我的回答很清楚(“您拥有的唯一选择 [...] 是创建自己的应用程序 [...]”)
  • 好的,谢谢,您对我在问题中提到的设备有任何想法吗?
  • 不,你不需要那个设备。您可以使用任何 Android NFC 设备或任何 NFC 读写器来编写标签。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多