如何获得icc认证?

时间:2018-10-02 20:04:23

标签: java android permissions carrier mobile-data

我在telephonyManager类中发现了一些有趣的方法,例如关闭/打开移动数据,但是当尝试使用它们时,显然会抛出安全异常。(“无运营商特权”)我用Google搜索了它,但是没有找到任何有用的解决方案。 因为它是运营商特权,所以我认为可以通过telephonyManager.getIccAuthentication(int appType, int authType, String data)来获得其许可,但是我在输入参数方面遇到了问题,因为我不知道应该传递什么来使其正常工作。

从文档到第一个参数将传递TelephonyManager.APPTYPE_SIM或/和TelephonyManager.APPTYPE_USIM,具体取决于它在使用setDataEnabled(boolean)中是否有意义。 如果我将TelephonyManager.APPTYPE_SIM作为第一个参数传递,我认为我应该将TelephonyManager.AUTHTYPE_EAP_SIM作为第二个参数传递(如果我错了,请改正我),反之亦然,当TelephonyManager.APPTYPE_USIM作为第一个传递参数时,{ {1}}作为第二个。

然后是第三个参数。必须将Base64编码为字符串。我在TelephonyProvider中找到以下代码行:         TelephonyManager.AUTHTYPE_EAP_AKA,其中byteParam是来自另一种方法的输入字节,该方法之前有成千上万种其他方法。如果我将“”作为第三个参数传递给getIccAuthentication方法,我将再次获得securityException(显然,参数错误),但是这使我缺乏String base64Challenge = Base64.encodeToString(byteParam, Base64.NO_WRAP);。我担心这可能是方法的无限循环,但是也许有人有任何想法或帮助我突破了这个限制?

我的示例代码:

getIccSimChallengeResponse

1 个答案:

答案 0 :(得分:2)

从文档中

  

需要权限:READ_PRIVILEGED_PHONE_STATE否则调用   应用具有运营商特权(请参见hasCarrierPrivileges())。

首先,您需要作为特权系统应用程序安装(需要root或拥有系统证书)。第二个要求您的UID是运营商的UID。否则,参数组合将无法工作。

相关问题