- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在处理配备 Android NFC 的设备,只是试图读取标签并从 Activity 接收信息。标记的类型为 MifareUltralight
.刚刚在 Android docs 中阅读了那个案例看来我首先必须在 list 文件中注册启动我的 Activity 的 Intent,然后我才能从中接收 NFC Intent。这就是我的 list 文件的样子:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.android">
<uses-feature android:name="android.hardware.nfc" android:required="false" />
<uses-permission android:name="android.permission.NFC" />
<application
android:allowBackup="true"
android:label="Test">
<activity
android:name="com.mycompany.android.activities.NfcTestActivity"
android:launchMode="singleTop"
android:label="Test">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
</intent-filter>
<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_tech_filter" />
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我将 nfc 功能设置为不需要,因为它不是我的应用运行所必需的。关于 NFC 技术过滤器,这是我的 nfc_tech_filter.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>
好吧,配置完成后,我的 NfcTestActivity
似乎应该能够接收 NFC Intents。这就是我实现它的方式:
public class NfcTestActivity extends Activity {
final String TAG = NfcTestActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "IntentAction (onCreate): " + getIntent().getAction());
NfcManager manager = (NfcManager) getSystemService(Context.NFC_SERVICE);
NfcAdapter adapter = manager.getDefaultAdapter();
if (adapter != null && adapter.isEnabled()) {
Log.i(TAG, "NFC adapter is enabled");
} else {
Log.i(TAG, "NFC adapter is disabled");
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i(TAG, "IntentAction (onNewIntent): " + getIntent().getAction());
}
@Override
public void onResume() {
super.onResume();
Log.i(TAG, "IntentAction (onResume): " + getIntent().getAction());
}
}
当我启动应用程序时,我得到以下日志:
05-28 10:41:52.044 31182-31182/com.mycompany.android I/NfcTestActivity? IntentAction (onCreate): android.intent.action.MAIN
05-28 10:41:52.054 31182-31182/com.mycompany.android I/NfcTestActivity? NFC adapter is enabled
05-28 10:41:52.054 31182-31182/com.mycompany.android I/NfcTestActivity? IntentAction (onResume): android.intent.action.MAIN
稍后,我读取了我的标签并显示了这个日志:
05-28 10:41:59.661 31182-31182/com.mycompany.android I/NfcTestActivity? IntentAction (onResume): android.intent.action.MAIN
这意味着 Activity#onResume
如文档所述,读取标签时调用的方法,但是,我在这里得到的是 android.intent.action.MAIN
而不是 NFC 一个( ACTION_NDEF_DISCOVERED
、 ACTION_TECH_DISCOVERED
或 ACTION_TAG_DISCOVERED
)。
此外,作为线索,当我从我的 Activity 声明中删除这段代码时,在我读取标记时不会出现 onResume
日志:
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
</intent-filter>
所以看来 TAG_DISCOVERED
操作肯定是以某种方式启动的,而不是其他方式,但我无法从 Activity 中正确地捕获它。
有人知道吗?
最佳答案
经过一些头脑 Storm ,我意识到默认 android.nfc.action.TAG_DISCOVERED
而不是 android.nfc.action.NDEF_DISCOVERED
为我完成了工作:
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
当我的标签类型被 TECH_DISCOVERED
覆盖时,我仍然不知道为什么我应该使用 TAG_DISCOVERED
,这更适合使用。无论如何,这就是我稍后用来获取标签 ID 的代码:
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "onResume: action-"+getIntent().getAction());
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(getIntent().getAction())) {
Tag tag = getIntent().getParcelableExtra(NfcAdapter.EXTRA_TAG);
String tagId = bytesToHexString(tag.getId());
Log.i(TAG, "NFC tag: " + tagId);
}
}
另请参阅:
关于android - 未针对 NFC Intent 显示正确的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906818/
我是 NFC 新手,我想将支持 NFC 的安卓手机作为 NFC 标签,并使用 NFC 阅读器读取其数据。如果您能建议我已经构建的用于发送数据的 NFC 应用程序或我应该使用哪种 NFC 读取器硬件,那
我使用ACR122U工具验证Mifare 1K NFC标签时总是失败,但是我可以用Android手机读写这个标签。 ACR122U Load Authentication Keys 90 00 6
我对 NFC 标准的概述有一些问题。 我所知道的是: ISO/IEC 14443是感应卡的标准,使用 RFID 作为通信协议(protocol); ISO/IEC 18092 (NFCIP-1) 是
我正在尝试实现一个基于通用 NFC 标签的授权系统。我想解决的问题之一是标签克隆。我读过一些文献,通过使用在制造过程中写在标签上的只读标签 ID 来确保标签的真实性。此 ID 由所有者签名并写在标签上
我想为使用 RFID 实现多项功能的系统提案指定设备。它可能会在未来扩展到包括交易,所以我正在努力寻找合适的技术来使用。 计划是使用被动卡。 HF/NFC 卡/读卡器以相同的频率运行,但它们可以互换使
我有一个 ACR122U 阅读器,可以读取很多标签,但不能读取 ICODE SLIX SL2S2002 标签。为什么会这样?我已经在移动设备上尝试过该标签,它被识别出来了。 最佳答案 ICODE SL
NFC Host Card Emulation mode摆脱了本地安全元件 (SE),并通过利用存储在云中的 SE 来促进支付,使用 cooperation几个参与方,例如商家、服务、提供商、发卡机构
Mifare (S50) 1K NFC 卡有 16 个扇区,每个扇区有 4 个 block ,每个 block 保存 16 字节数据。 每个扇区的最后一个 block 是扇区尾部,其中 KeyA 和
我创建的系统存在一些问题。 在登录屏幕等特定页面上,我接受 NFC 卡刷卡以读取 ID 并让用户登录 但是,当用户在未编码 NFC 的页面上扫描卡时,Android 设备会自动最小化我的应用程序并显示
我正在尝试使用 NFC 从血糖仪读取数据,目前在 Android 上,还没有尝试过 iOS(没有带 NFC 的手机)。 我正在使用 react-native-nfc-manager 作为库和它附带的示
这个问题专门针对 MIFARE Ultralight C/EV1,或 MIFARE DESFire EV1,甚至 NTAG 卡。我想实现一个 token 系统,这样每次普通用户读取其中一张卡片时,他们
考虑一名员工使用 NFC 安卓设备通过读取固定在墙上的非接触式 javacard 来报告他的位置,每个人都可以访问。 员工用智能手机扫描javacard,只发送时间戳 非接触式 javacard 接收
有没有办法让 NFC 应用程序读取标签,而不是可以在手机上下载的所有其他应用程序? 通常,如果有多个应用程序可以读取给定标签,系统会提示用户打开哪个应用程序。我想跳过这一步,让我的应用程序自动打开。
我想让我的安卓设备充当 NFC 标签。是否可以使用 NFC 设备作为 NFC 标签?我怎样才能做到这一点?我已经完成了读/写标签,设备之间的光束数据。 最佳答案 这可能是可行的,具体取决于您的 NFC
如果我有 NFC 读取器/写入器设备,我能否让它检测我的支持 NFC 的 Android 手机,以便我可以将数据从我的手机传输到该设备?我在 Stackoverflow 上找到了一些与卡模拟相关的链接
我在 SO 上看到很多关于 NFC 的问题,我遇到的最接近的问题是 Can an Android NFC phone act as an NFC tag? 然而,这个问题是一年多前提出的,当时 Gal
我有一台搭载 Android 4.2 的 Android 平板电脑。此平板电脑没有 NFC 硬件。但是我有一个外部 USB 读卡器:ACR 1252U , 带有 Android library .不幸
据我目前了解,NFC 手机将充当 NFC 阅读器,从 NFC 标签读取数据。现在我的问题是,我们可以改变这个吗?我们能否让 Android NFC 手机充当 NFC 读取器从中获取数据的标签? 感谢您
我被搜索了有关 NFC SIM 卡的信息,发现 such explanations关于他们在这里和那里: For those who want to use near field communicat
Core NFC 是否适用于 iPad? 综上所述,iPad does have NFC chips ,但 Core NFC documentation不说它支持它。 Note Reading NFC
我是一名优秀的程序员,十分优秀!