首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android :我无法捕捉空标签意图

Android :我无法捕捉空标签意图
EN

Stack Overflow用户
提问于 2014-03-25 13:11:26
回答 2查看 3.5K关注 0票数 4

感谢所有花时间读这篇文章的人。对不起我的英语不好。我学会了我保证。

我正在开发一个使用NFC的Android应用程序。我对空标签有意见。当我读取空标签时,我无法理解它的意图,它总是启动Android活动来读取ta标记,并提到空标记。对于其他带有写东西的标签,我没有问题。

我搜索但找不到好东西。我想我的问题在清单上。

所以,我补充一下,当然:

代码语言:javascript
复制
<uses-permission android:name="android.permission.NFC" />

<uses-feature
    android:name="android.hardware.nfc"
    android:required="true" />

在我第一次加入的活动中

代码语言:javascript
复制
<intent-filter>
            <action android:name="android.nfc.action.TECH_DISCOVERED" />

            <data android:mimeType="text/plain" />
 </intent-filter>

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

xml/nfc.xml资源文件包含以下技术过滤器:

代码语言:javascript
复制
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" >
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</tech>
        <tech>android.nfc.tech.Ndef</tech>
        <tech>android.nfc.tech.NdefFormatable</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>

我在一些网站上读到,增加

代码语言:javascript
复制
<intent-filter>
            <action android:name="android.nfc.action.TAG_DISCOVERED" />

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

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

            <data android:mimeType="*/*" />
</intent-filter>

所以我就这么做了。

但没起作用。

我知道我可能忘了什么。但是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 10:22:24

好吧,我解决了我的问题!这不是清单,而是java代码。

第一次阅读有关nfc的教程时,我使用了部分代码。有一些代码我没有适应你给我的建议。

这是我代码的旧部分

代码语言:javascript
复制
IntentFilter[] filters = new IntentFilter[1];
filters[0] = new IntentFilter();
filters[0].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
try {
    filters[0].addDataType(MIME_TEXT_PLAIN);
} catch (MalformedMimeTypeException e) {
    Log.e("App","Wrong mime")
}
adapter.enableForegroundDispatch(activity, pendingIntent, filters, techList);

动作不对,哑剧类型。很多错误..。我换了

代码语言:javascript
复制
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
adapter.enableForegroundDispatch(activity, pendingIntent, null, null);

而且它工作得很完美!我希望它能帮助像你这样的人通过你的解释帮助我。

再次感谢您的时间!

票数 4
EN

Stack Overflow用户

发布于 2014-03-25 16:26:47

如果您希望您的活动启动(或显示活动选择器)用于不包含NDEF消息的标记(或包含在Android上不可过滤的NDEF消息),则android.nfc.action.TECH_DISCOVERED意图是可行的。

android.nfc.action.TAG_DISCOVERED意图过滤器意味着只作为一个倒退。因此,只有在没有为与标记匹配的意图筛选器注册其他活动(不仅仅是应用程序)时,它才会触发。

如果标签上的第一个android.nfc.action.NDEF_DISCOVERED记录与给定的MIME类型匹配,或者该记录与给定的URI匹配(包括针对NFC外部类型的URI映射),则意图筛选器将只触发触发器。

应该在表单中使用android.nfc.action.TECH_DISCOVERED意图筛选器:

代码语言:javascript
复制
<intent-filter>
    <action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
           android:resource="@xml/nfc_filter" />

不应添加<data ... /><category ... />标记。

包含标记列表(xml/filter_nfc.xml)的资源文件必须包含与标记匹配的vaild技术筛选器。每个<tech>...</tech>条目指定您的意图筛选器将触发的标记技术。可以对多个标记技术条目进行分组,以形成逻辑和逻辑OR。一个<tech>组中的所有<tech-list>...</tech-list>条目都与逻辑和。XML文件中的多个<tech-list>...</tech-list>组与逻辑OR组合在一起。因此,如果您想要触发任何NFC标记技术,您的XML文件应该如下所示:

代码语言:javascript
复制
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" >
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcF</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcBarcode</tech>
    </tech-list>
</resources>

另一方面,您的XML文件需要标记才能同时拥有所有标记技术,这是不可能的,因为有些技术相互排斥(例如,标记不能同时检测为NfcA和NfcB )。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22635686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档