Можно ли получить системный класс по отражению в Android? - PullRequest
0 голосов
/ 21 сентября 2018

Меня интересует возможность общения с SIM-картой в Android.Я знаю, что только системные приложения, которые имеют разрешение MODIFY_PHONE_STATE, или приложения, которые имеют привилегии оператора на API> 22 (https://source.android.com/devices/tech/config/uicc)), могут вызывать метод TelephonyManager.iccOpenLogicalChannel () и выполнять дальнейший обмен APDU с SIM-картой. Однако существуетзамечательный проект, который может добавить открытый интерфейс для связи с защищенными элементами, сим-картами и т. д. под названием SEEK-for-android (https://github.com/seek-for-android/pool).. Большая проблема в том, что вам придется вручную устанавливать патч для ОС, чтобы использовать его. И так, пока яотлаживал приложение, которое я видел в строке logcat:

09-20 12:27:35.613 14942-14954/? W/System.err: java.lang.NullPointerException: Attempt to read from null array
    at android.os.Parcel.readException(Parcel.java:1627)
    at android.os.Parcel.readException(Parcel.java:1574)
    at com.android.internal.telephony.ITelephony$Stub$Proxy.hasIccCard(ITelephony.java:3922)
    at org.simalliance.openmobileapi.uiccterminal.UiccTerminal$TerminalServiceImplementation.isCardPresent(UiccTerminal.java:432)
    at org.simalliance.openmobileapi.service.Terminal.isCardPresent(Terminal.java:497)
    at org.simalliance.openmobileapi.service.Terminal.initializeAccessControl(Terminal.java:242)
    at org.simalliance.openmobileapi.service.Terminal$InitialiseTask.doInBackground(Terminal.java:121)
    at org.simalliance.openmobileapi.service.Terminal$InitialiseTask.doInBackground(Terminal.java:109)
    at android.os.AsyncTask$2.call(AsyncTask.java:295)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)

Вы можете увидеть классы org.simalliance.openmobileapi. * в stacktrace. Так что кажется, что мое устройство (Samsung galaxy J2 - SM-G532F) на самом деле этот патч был применен к ОС! Теперь мой вопрос: могу ли я каким-то образом их использовать? Я пытался создать его, вызвав Class.forName("org.simalliance.openmobileapi.uiccterminal.UiccTerminal"), но у меня ничего не получилось, и я получил ClassNotFoundException.занятия? Может я что-то упускаю?Заранее спасибо

...