一个NFC标签上有两个动作

时间:2013-10-16 11:40:06

标签: android nfc ndef

我想知道是否可以执行以下操作;

我想要一个与我正在开发的Android应用程序配合使用的nfc标记。

如果我刷标签并且我的应用程序已安装在手机上,我想从标签中读取纯文本数据。没有什么比999更的数字。

但如果我的应用程序没有安装,我希望标签打开网页浏览器并重定向到他们可以下载的链接?

这有可能与android已经开始阅读意图的方式有关吗?

从我对它的理解(我在nfc的专业人员)你只能做其中一个吗?

或者我错了?

编辑:

有没有办法在不在Play商店加载应用程序的情况下执行此操作?这是一个大学项目,我不认为如果我公开项目,他们会很高兴。我希望将它们带到一个链接,你可以下载.apk

2 个答案:

答案 0 :(得分:6)

如果要求避免播放商店,您可以在标签上存储包含两条记录的NDEF消息:第一条记录包含应用下载页面的URL。第二条记录包含纯文本数据。 (事实上​​,您甚至可以将数据编码到URL中,因此只使用一个URI记录。)

+----------------------------------------------+------------------+
| URI Record: http://www.zapnologica.com/myapp | Text Record: nnn |
+----------------------------------------------+------------------+

如果您的应用程序未安装,应用程序的下载页面(此处:http://www.zapnologica.com/myapp)将在用户的Web浏览器中打开。

为了在代码扫描时自动启动您的应用,您的应用需要为下载网址定义一个意图过滤器:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:scheme="http"
          android:host="www.zapnologica.com"
          android:pathPrefix="/myapp" />
</intent-filter>

然后,在您的应用程序中,您可以从标记中读取整个NDEF消息(实际上NDEF消息将自动提供给您的应用程序EXTRA_NDEF_MESSAGES

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
    Parcelable[] rawMsgs = Intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    if (rawMsgs != null) {
        msgs = new NdefMessage[rawMsgs.length];
        for (int i = 0; i < rawMsgs.length; i++) {
            msgs[i] = (NdefMessage) rawMsgs[i];
        }
    }
}

因此,msg[0].getRecords()将返回两条记录 - URI记录和文本记录。

答案 1 :(得分:0)

我认为这就是你要找的东西:

Tutorial NFC

  

如果没有我们应用的用户触摸该标记,它将使用内置机制将其带到Android Play商店中应用的下载页面。安装完成后,任何后续的水龙头都会启动应用并在屏幕上显示游戏卡。