使用NDEF Android应用程序记录(AAR)获取NFC标签

san*_*vys 7 android nfc intentfilter ndef android-applicationrecord

我正在研究NFC应用程序.要启动我的应用程序,我正在使用带有AAR NDEF记录的NDEF标记.

这很好用.但现在我想直接用app阅读标签内容.我怎样才能做到这一点?

(它已经有效,当我从手机中取出标签并再次触摸它时,但我想取消这一步.)

表现:

<?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>
Run Code Online (Sandbox Code Playgroud)

而我只想获得NDEF_DISCOVERED意图.但我总是得到action.MAIN/category.LAUNCHER意图与我的调试器.

任何帮助将不胜感激.我基于此做了我的工作:Android/NFC:在没有新Intent的情况下在onCreate()中获取标签

Mic*_*and 16

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

  1. 作为NDEF消息的第一条记录过滤的NDEF记录(您只能为NFC标记上的第一条NDEF记录创建intent-filters).根据您自己的答案,这将是您的案例中的文本记录(或MIME类型为text/plain的MIME类型记录).但是,您可能需要考虑将NFC论坛外部类型记录与您的自定义应用程序特定类型名称一起使用(请参阅此处,这样可以让您的应用程序更好地将标记与其他应用程序使用的标记区分开来.文本记录应该只是如果它包含人类可读的非解释性 文本,则使用.
  2. 如果您想确保只有您的应用程序使用标记启动,并且如果用户未安装应用程序,则会自动打开应用程序的Play商店页面,那么您还应该使用Android应用程序记录(AAR).该记录应该是NDEF消息中的最后一条记录.(请注意,无论NDEF消息中的位置如何,都将遵循AAR,但将其用作第一条记录将导致您在问题中链接帖子中描述的问题.)

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

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用自定义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>
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序不能一个NDEF_DISCOVERED意图过滤器的匹配第一个与代码中NDEF消息的记录 您的标签包含一个Android应用程序记录,第一个活动中您的清单有一个意图过滤器声明android.intent.action.MAIN,并android.intent.category.LAUNCHER会启动.作为该活动,因此,不声明期待的NFC意图将通过android.intent.action.MAIN(它包含NDEF消息/标签手柄).

  • @ hooby3dfx不,Android不支持这个. (2认同)