【问题标题】:Get NFC tag with NDEF Android Application Record (AAR)使用 NDEF Android 应用记录 (AAR) 获取 NFC 标签
【发布时间】:2014-08-26 11:11:00
【问题描述】:

我正在开发一个 NFC 应用程序。为了启动我的应用程序,我使用了一个带有 AAR NDEF 记录的 NDEF 标记。

这很好用。但现在我想直接用应用程序读取标签内容。我该怎么做?

(已经可以了,当我从手机上取下标签并再次触摸它时,但我想省略这一步。)

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="nfctagscanner.mobileapps.lt.nfctagscanner" >
    <uses-feature android:name="android.hardware.nfc" android:required="true"/>
    <uses-permission android:name="android.permission.NFC" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />


            </intent-filter>


        </activity>
        <activity
            android:name=".NFCScanActivity"
            android:label="@string/app_name" >
            <intent-filter>

                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="nfctagscanner.mobileapps.lt.nfctagscanner" android:host="ext"
                    android:pathPrefix="/android.com:pkg" />
            </intent-filter>
        </activity>
    </application>

</manifest>

我只想获得 NDEF_DISCOVERED 意图。但我总是通过调试器获得 action.MAIN/category.LAUNCHER Intent。

任何帮助将不胜感激。我是根据这个来做我的工作的:Android / NFC: Get Tag in onCreate() without new Intent

【问题讨论】:

    标签: android nfc intentfilter ndef android-applicationrecord


    【解决方案1】:

    如果您希望您的应用由您的标签启动并希望接收已解析的 NDEF 消息,您的标签应包含以下内容:

    1. 要过滤的 NDEF 记录作为 NDEF 消息的第一条记录(您只能为 NFC 标签上的第一个 NDEF 记录创建意图过滤器)。给定your own answer,在您的情况下,这将是一个文本记录(或具有 MIME 类型 text/plain 的 MIME 类型记录)。但是,您可能需要考虑使用带有自定义应用程序特定类型名称的 NFC 论坛外部类型记录(请参阅here,因为这将允许您的应用程序更好地将您的标签与其他应用程序使用的标签区分开来。文本记录应该仅在包含人类可读的非解释 文本时使用。
    2. 如果您想确保您的应用以 标签启动并且在用户没有应用时自动打开应用的 Play 商店页面安装,那么您还应该使用 Android 应用程序记录 (AAR)。该记录应该是 NDEF 消息中的最后一个记录。 (请注意,无论 NDEF 消息中的位置如何,都会兑现 AAR,但将其用作第一条记录将导致 post you linked in your question 中描述的问题。)

    一旦您准备好包含正确 NDEF 消息的标签,您必须为应该接收标签发现事件和触发它的 NDEF 消息的活动创建适当的意图过滤器:

    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    

    或者,如果您使用自定义 NFC 论坛外部类型:

    <intent-filter>
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="vnd.android.nfc"
              android:host="ext"
              android:pathPrefix="/yourdomain.com:yourtypename"/>
    </intent-filter>
    

    如果您的应用没有有一个NDEF_DISCOVEREDintent 过滤器与您的 NDEF 消息的first 记录相匹配标签 并且您的标签包含一个Android应用程序记录,在您的清单中声明的​​第一个活动具有android.intent.action.MAINandroid.intent.category.LAUNCHER的意图过滤器将开始。因此,由于该活动没有声明期待 NFC 意图它将传递 android.intent.action.MAIN(它包含 NDEF 消息/标签句柄)。

    【讨论】:

    • 非常感谢您提供的信息丰富的回答!现在我可以更清楚地看到关于这个主题的一切:)
    • 如果接收设备没有安装应用程序,有没有办法取回有效载荷?我希望在他们安装之后,他们仍然会以某种方式获得意图。
    • @hooby3dfx 你的意思是在同一个水龙头上? IE。 NFC 交互 -> Play Store -> 用户安装应用 -> 用户手动打开应用 -> 接收数据负载?
    • 正是——这样如果接收方还没有应用,安装后发送方不需要再次点击
    • @hooby3dfx 不,Android 不支持。
    【解决方案2】:

    我不知道这是否是正确的答案,但我找到了解决办法:

            <activity
                android:name=".NFCScanActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    
                    <category android:name="android.intent.category.DEFAULT" />
    
                    <data android:mimeType="text/plain" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多