是否有可能无意地从Android读取NFC标签?

问题描述 投票:0回答:1

[在Android上使用NFC时,我有些失落。

我要执行以下操作:-使用一个NFC标签作为令牌-在Android上阅读并显示一些功能-如果手机已从令牌双向消息中删除-如果电话重新连接或连接到另一个令牌,则显示另一个功能

[我在AndroidManifest文件中将android.nfc.action.NDEF_DISCOVERED使用了意图过滤器,在XML中过滤了android.nfc.action.TECH_DISCOVERED

主活动成功打开,并且如果附加了另一个标签

 @Override
    protected void onNewIntent(Intent intent) { ...}

被叫。

我还使用计时器检查标签是否仍在连接(基本上是ndefTag.connect()NdefMessage ndefMsg= ndefTag.getNdefMessage();,然后查看是否接收到任何东西。

我将“活动”的启动模式设置为android:launchMode="singleInstance,否则,每次将新标签放入电话后,应用程序都会完全重启。

现在我完全失去了意图系统,因为通常main会启动其他活动,而意图是由于当前活动和当前屏幕信息的丢失而跳回main。

所以我的问题是关于两个部分的:-真的如此复杂,需要使用意图吗?不能,我只是以某种方式连接到电话的NFC读取器,并且每隔几秒钟就轮询一次?询问是否已连接标签,标签上有什么数据。通过NDEF_DISCOVERED / TECH_Discovered组合,我发现有时它会挂起。 (同样,如果不是SingleInstance-Activity,则有时也不会启动新活动)。 (首选)-还是有一些干净的方法可以将NFC意图转发到应用程序的实际活动?还是说在运行时不应该调用main而是一些处理连接的后台任务?

android tags nfc
1个回答
0
投票

是,可以在没有意图的情况下读取NFC卡,并且这是一个更加可靠的过程,尤其是在写入卡时

使用enableReaderMode代替https://developer.android.com/reference/android/nfc/NfcAdapter#enableReaderMode(android.app.Activity,%20android.nfc.NfcAdapter.ReaderCallback,%20int,%20android.os.Bundle)

[基本上,您会找到一个Set,当发现Tag时将调用该回调函数,该回调函数将在单独的线程中运行,而不是将Intent传递到主UI线程。

enableForegroundDispatch则您的应用程序暂停,而系统应用程序读取卡,然后恢复您的应用程序并将其传递给新意图。这种暂停可能是您失去活动状态的原因。

使用enableReaderMode,您的应用在读取卡时不会暂停。

基本操作是:-

1)实现回调方法

2)OnResume enableReaderMode和OnPause disableReaderMode

3)在onTagDsicovered中(回调函数)连接到标签,使用尝试块循环处理getNdefMessage,以处理标签离开读取范围或循环测试isConnected

时生成的异常

4)runOnUiThread基于NDEF消息的所需操作

5)当标签离开读取范围时(或仅让读取器回调线程退出,准备读取新卡时,请执行您想做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.