Как смоделировать тег NFC для инструмента разработчика в приложении? - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь смоделировать тег NFC с помощью инструмента для разработки приложений в приложении.Текущая реализация использует отражение и нацелена на API 27. При переходе на API 28 с AndroidX метод 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[]{}));

Вот ссылки, на которые я смотрел:

1 Ответ

0 голосов
/ 03 апреля 2019

Вы не хотите копировать код из оригинала, это не то, как работает насмешка. Если этот конкретный метод был помечен как @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 не уверен, насколько уместен обходной путь. (это несколько старое).

...