【问题标题】:Detecting problems with my app using NFC TAG使用 NFC TAG 检测我的应用程序的问题
【发布时间】:2014-11-20 17:00:06
【问题描述】:

我开发了一个使用 NFC 功能的应用,并获得了这个 TAG 用于我的测试。

a busy cat http://nsae02.casimages.net/img/2014/11/20/mini_141120054648901134.png

及其特点

a busy cat http://nsae02.casimages.net/img/2014/11/20/mini_141120054925844663.png

一切都很好..

并在配置中添加以下行

<uses-feature android:name="android.hardware.nfc" android:required="false" />
             <intent-filter>
         <action android:name="android.nfc.action.TAG_DISCOVERED"/>
           <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
             <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>

添加我的代码,以便当它检测到 nfc 并选择我的应用时

获取 UID .. 并使其正确。 (然后找出是否可以获取文本等不同的字段。) 好的。它工作正常..

my app blue http://nsae02.casimages.net/img/2014/11/19/mini_141119082121303903.png

我的问题是 同样使用 NFC TAG TAG Writer 应用程序编辑它

a busy cat http://nsae02.casimages.net/img/2014/11/20/mini_141120055409818122.png

a busy cat http://nsae02.casimages.net/img/2014/11/20/mini_141120055615627271.png

然后我输入了一条文字,然后我又继续使用我的应用程序,但不再出现在列表中..

Not my app http://nsae02.casimages.net/img/2014/11/19/mini_141119081714874308.png

经过多次转折,能够重新出现在我的应用列表中,格式化 NFC TAG

我做错了什么? 如果我没有提供足够的信息,请问我。 非常感谢

【问题讨论】:

    标签: java android nfc intentfilter ndef


    【解决方案1】:

    您需要设置与您的标签类型相匹配的适当意图过滤器。目前您正在使用

    • 一个不会在大多数设备上触发的 NDEF_DISCOVERED 意图过滤器,因为它没有指定数据类型,并且
    • 一个 TAG_DISCOVERED 意图过滤器,仅在 AndroidManifest.xml 中使用时作为备用过滤器。

    因此,您会遇到回退行为:虽然您的标签不包含 NDEF 记录,但它会匹配回退行为。一旦您向其写入 Text 记录,它将匹配所有注册 Text 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>
    

    请注意,使用文本记录通常是个坏主意。首先,它们仅用于人类可读的数据,其次,许多应用程序都注册了它们,这使得用户很难在活动选择器对话框中选择正确的应用程序。

    这仍然无法捕捉到您的代码不包含任何数据的情况(当前由后备过滤器处理)。在这种情况下,您应该为 NfcV 标签技术使用 TECH_DISCOVERED 意图过滤器:

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

    在您的 res/xml 文件夹中,您需要创建一个名为 filter_nfc.xml 的文件,其中包含以下内容:

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

    或者当您想注册多种不同的标签技术时:

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

    【讨论】:

    • 非常感谢!你的解释很清楚。告诉我还放filter_nfc NFCB、NFCF、NFCA有必要吗?当我使用完美的应用程序检测到 nfc 时。但现在如果我的应用程序不是 ejecutandoce 则有效现在向我发送一条错误消息 APP 已停止
    • 对于您在上面的问题中显示的特定标签,在 tech-filter 文件中包含 NfcV 就足够了。不过,我不确定你想对评论的第二部分说什么。
    • 当我使用 nfc 并检测到我的应用程序时,有两个选项。如果我的应用程序正在运行,如果我的应用程序没有运行,它就可以正常运行消息发送应用程序已停止
    • 我找到了详细的道歉,在 onResume 中有一个变量它没有被初始化。非常感谢.. XPERIA 有一个 TAG TYPE A 但我无法让我的应用检测到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多