感谢所有花时间读这篇文章的人。对不起我的英语不好。我学会了我保证。
我正在开发一个使用NFC的Android应用程序。我对空标签有意见。当我读取空标签时,我无法理解它的意图,它总是启动Android活动来读取ta标记,并提到空标记。对于其他带有写东西的标签,我没有问题。
我搜索但找不到好东西。我想我的问题在清单上。
所以,我补充一下,当然:
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="true" />在我第一次加入的活动中
<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资源文件包含以下技术过滤器:
<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>我在一些网站上读到,增加
<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>所以我就这么做了。
但没起作用。
我知道我可能忘了什么。但是什么呢?
发布于 2014-03-26 10:22:24
好吧,我解决了我的问题!这不是清单,而是java代码。
第一次阅读有关nfc的教程时,我使用了部分代码。有一些代码我没有适应你给我的建议。
这是我代码的旧部分
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);动作不对,哑剧类型。很多错误..。我换了
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
adapter.enableForegroundDispatch(activity, pendingIntent, null, null);而且它工作得很完美!我希望它能帮助像你这样的人通过你的解释帮助我。
再次感谢您的时间!
发布于 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意图筛选器:
<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文件应该如下所示:
<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 )。
https://stackoverflow.com/questions/22635686
复制相似问题