java - 如何为应用内开发人员工具模拟 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[]{}));
以下是我看过的链接:
- https://www.vogella.com/tutorials/AndroidParcelable/article.html
- https://guides.codepath.com/android/using-parcelable
- 如何在 android 中创建 Tag 对象?
- 识别 NFC 标签 ID
- https://www.google.com/search?client=safari&rls=en&q=android+9+nfc+not+working&ie=UTF-8&oe=UTF-8
- https://www.google.com/search?client=safari&rls=en&biw=1080&bih=923&ei=68ijXMnoDoHisAXPjLzQCA&q=public+static+Tag+createMockTag%28byte%5B%5D+is%2C+int%5B%5D+techList% 2C+Bundle%5B%5D+techList+Extras%29+%7B&oq=public+static+Tag+createMockTag%28byte%5B%5D+is%2C+int%5B%5D+techList%2C+Bundle%5B%5D +techList+Extras%29+%7B&gs_l=psy-ab.3...107084.107084..107212...0.0..0.0.0....0....1..gws-wiz。 rfrM415Sx7o
- https://developer.android.com/about/versions/pie/android-9.0
- https://developer.android.com/reference/android/nfc/package-summary.html
- https://developer.android.com/sdk/api_diff/28/changes.html
- https://developer.android.com/reference/android/os/Parcelable.Creator
- 可能还有几个我已经关闭或导航离开的标签。
解决方案
您不想从原始代码中复制代码,这不是模拟的工作方式。如果此特定方法已用 @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 模拟静态方法不确定解决方法的相关性(它有点旧)。
推荐阅读
- javascript - JavaScript 表单输入
- java - 如何更改二维数组的大小?
- ios - 滑动手势iOS swift
- ruby-on-rails - Rails - 检测字符串中完全匹配的关键字
- python - 如何使用 discord.py 在系统消息频道中发送问候消息
- java - 数字向量的 JSON 格式
- python - 如何将下一行作为不和谐机器人的输入
- python - Python AWS Lambda 函数 ""errorMessage": "'function' 对象没有属性 'loads'"
- c - 有人可以解释 C 使用 #define UMAX (a, b) ((a) > (b) ? (a) : (b)) 指令的硬逻辑错误,该指令返回较低的值,在 2 个编译器中
- nginx - 如何将通配符传递给 nginx 代理主机头?