0

我对能够在 Android 中与 SIM 卡进行通信很感兴趣。我知道只有具有 MODIFY_PHONE_STATE 权限的系统应用程序或在 API >22 ( https://source.android.com/devices/tech/config/uicc ) 上具有运营商特权的应用程序才能调用 TelephonyManager.iccOpenLogicalChannel() 方法和与 SIM 卡进行进一步的 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.* 类。所以看来我的设备(三星 Galaxy J2 - SM-G532F)实际上已将此补丁应用于操作系统!现在我的问题是:我能以某种方式使用它们吗?我试图通过调用来实例化它,Class.forName("org.simalliance.openmobileapi.uiccterminal.UiccTerminal") 但我没有成功并收到 ClassNotFoundException。那么是否可以实例化和使用这些类?也许我错过了什么?先感谢您

4

0 回答 0