Android编程设置或重置SIM卡PIN码

4
我已经实现了以下代码来解锁我的应用程序(此代码仅适用于系统应用程序,因此我将其设置为系统应用程序)。
TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
int state = manager.getSimState();

if(state == TelephonyManager.SIM_STATE_PIN_REQUIRED || state == TelephonyManager.SIM_STATE_PUK_REQUIRED)
{
   try {

      @SuppressWarnings("rawtypes")
      Class clazz = Class.forName(manager.getClass().getName());

       Method m = clazz.getDeclaredMethod("getITelephony");
       m.setAccessible(true);
       ITelephony it = (ITelephony) m.invoke(manager);
       if (it.supplyPin(simPin)) {
           Toast.makeText(context,"SIM UnLocked",Toast.LENGTH_LONG).show();
       } else {
           Toast.makeText(context,"SIM UNLOCK FAILED",Toast.LENGTH_LONG).show();
       }

    } catch (Exception e) {
    // 
        e.printStackTrace();
    }

}else{
    Toast.makeText(context,"SIM is not Locked",Toast.LENGTH_LONG).show();
}

对于我来说它运行良好,但现在我需要以编程的方式实现SIM卡的设置或重置PIN码,请告诉我是否可能。如果可能的话,我该如何实现?


1
据我所知,您可以执行USSD代码来完成此操作。请查看https://dev59.com/D2w05IYBdhLWcg3weBpF并找到设置/更改PIN码的USSD代码。我认为它可以起作用。 - Pedro Oliveira
谢谢@PedroOliveira的回复。但是我该如何发送PIN更改请求? - Naveed Ali
1
你可以在这里获取更多信息:http://berlin.ccc.de/~tobias/mmi-ussd-ss-codes-explained.html。请查看“SIM控制代码”部分。 - Pedro Oliveira
2
你说得对。但是这段代码是在本地执行的,你不需要按“呼叫”按钮来执行这段代码。但是经过一些搜索,我认为你似乎不能使用Intent来执行此代码。不过值得一试。尝试在你的手机数字键盘上执行该代码,然后再尝试使用Intent。 - Pedro Oliveira
@PedroOliveira,这对我有用,但我无法通过编程方式确认是否设置了PIN。我已经尝试使用onActivityResult()来检查PIN是否更改,但resultCode为0。 - Naveed Ali
显示剩余2条评论
1个回答

3
String ussdCode = "**04*"+oldPin+"*"+newPin+"*"+newPin+"#";
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接