【发布时间】:2014-07-07 20:17:14
【问题描述】:
我知道您可以简单地通过创建意图并使用它启动和活动来模拟 NFC 标签。根据我的理解和测试,这只有在您将意图过滤器添加到清单时才有效。
我想模拟标签并仅通过前台调度将它们调度到活动/片段,因此不能在清单中使用意图过滤器启动活动对我来说。
我的程序结构如下所示:Activity -> 几个 Fragment,其中一个通过前台调度对 NFC 标签感兴趣。 nfc-fragment 具有用于pendingIntent 和dispatch-enable 和-disabling 的必要代码。 Activity 实现了 onNewIntent() 方法,如果 nfc-fragment 处于活动状态,该方法会通过 nfc-fragment 中的方法调用对 Intent 的进一步处理。
程序运行良好,但我需要使用自动化测试来测试其行为。
我已经尝试过使用
final Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED);
intent.putExtra(NfcAdapter.EXTRA_ID, "1234567890".getBytes());
solo.getCurrentActivity().startActivity(intent);
但这只是给了我一个ActivityNotFoundException。目前我检索 nfc-fragment 并调用该方法从测试内部手动处理意图,但这给了我
android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。
因为该方法涉及更新视图等。它以某种方式工作,因为我只需要切换到不同的活动或片段,然后返回以获取视图更新,但我想知道是否有更好和更清洁的方法这个。
感谢您的帮助,如果您需要更多信息,请告诉我。
【问题讨论】:
-
好奇你为什么使用
ACTION_TAG_DISCOVERED而不是ACTION_TECH_DISCOVERED? -
@IgorGanapolsky 我不确定,因为它已经六年多了。快速浏览一下文档告诉我
ACTION_TECH_DISCOVERED需要一个清单条目,我对标签技术不感兴趣,但只要标签被识别(加上缺乏专业知识)。
标签: android testing android-fragments nfc foreground