我正在尝试使用应用内开发人员模拟工具模拟NFC标签。当前实现使用反射,并以API 27为目标。通过AndroidX迁移到API 28后,未找到方法createMockTag
。我注意到它在Android代码中是public static
,但是带有@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[]{}));
以下是我查看过的链接:
答案 0 :(得分: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和解决方法:Mocking static methods with Mockito不确定解决方法的重要性如何(它有些陈旧)。