首页 > 解决方案 > 如何为应用内开发人员工具模拟 NFC 标签?

问题描述

我正在尝试使用应用内开发人员模拟工具来模拟 NFC 标签。当前实现使用反射并针对 API 27。使用 AndroidX 迁移到 API 28,找不到该方法createMockTag。我注意到它public static在 Android 代码中,但带有注释@Hide,这意味着我无法访问它。然而,我找到了一种从包裹创建标签的方法,但我还没有找到任何简单的方法来做到这一点。我可以创建自己的 Parcelable 类,但是in.readInArray(...)在构造函数中调用时,它会要求提供我没有的参数。我会附上它的样子知道和我希望它看起来像什么。

这是一个大问题,因为我们需要模拟 NFC 标签,但似乎没有办法访问该方法。而且我还尝试将该Tag.java类复制到我的项目中,但它无法访问某些看似内部的类,INfcTag例如TagTechnology. 有没有其他人遇到过这个,可以请帮助我吗?谢谢你。

// Tag mockTag = Tag.CREATOR.createFromParcel(); // I'd like to create one here
Method createMockTag = Tag.class.getMethod("createMockTag", byte[].class, int[].class, Bundle[].class);     
scanIntent.putExtra(NfcAdapter.EXTRA_TAG, (Tag) createMockTag.invoke(Tag.class, tagId, new int[]{}, new Bundle[]{}));

以下是我看过的链接:

标签: javakotlinnfcandroid-9.0-pieandroid-10.0

解决方案


您不想从原始代码中复制代码,这不是模拟的工作方式。如果此特定方法已用 @Hide 标记,则可能意味着它已被弃用。这可能意味着 API 28+ 中有此方法的替代方法。

@Hide 可能是因为他们还不能完全弃用它,但将来可能会。这是当前参考 - https://developer.android.com/reference/android/nfc/package-summary

不过,一般来说,说你使用 Mockito - https://static.javadoc.io/org.mockito/mockito-core/2.25.1/org/mockito/Mockito.html#2 - 只是存根模拟。
对于存根静态方法,看起来有几个线程 - 对于实际的功能请求:https ://github.com/mockito/mockito/issues/1013

和解决方法:使用 Mockito 模拟静态方法不确定解决方法的相关性(它有点旧)。


推荐阅读