Как смоделировать тег NFC для инструмента разработчика в приложении?
Я пытаюсь смоделировать тег NFC с помощью инструмента для разработки приложений в приложении. Текущая реализация использует отражение и нацелена на API 27. Миграция на API 28 с AndroidX, метод 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
- Как мне создать объект Tag в Android?
- Идентификация идентификатора метки NFC
- 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 + Пачка% 5B% 5D + techList + Дополнительно% 29 +% 7B & OQ = общий + статический + Тэг + createMockTag% 28byte% 5B% 5D + является% 2C + INT% 5B% 5D + techList% 2C + Пачка% 5B% 5D + techList + Extras% 29 +% 7B и gs_l = пси-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
- И, возможно, еще несколько, чьи вкладки я закрыл или от которых ушел.
1 ответ
Вы не хотите копировать код из оригинала, это не то, как работает насмешка. Если этот конкретный метод был помечен как @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 - просто заглушите макет. Похоже, что для создания статических методов существует несколько потоков - для фактического запроса функции: https://github.com/mockito/mockito/issues/1013 и обходного пути: Mocking статических методов с помощью Mockito не уверен, насколько уместен Обходной путь больше (его несколько стар).