Android电话管理器检测SIM卡

时间:2011-02-08 13:45:00

标签: android

我正在开发一款基本上依赖于SIM卡状态的Android自动启动应用。当我的应用程序自动启动时,我需要它来检查SIM卡的更改位置。之后,我通过获取共享首选项将当前SIM与过去的SIM进行比较。但是,当获取新SIM卡的值时,应用程序会返回空指针异常。

我想对sim状态作出反应。

当我收到SIM_STATE_READY状态时,我想从电话管理员那里获得新的SIM状态。

  telMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
     int simState = telMgr.getSimState();

     switch (simState) 
    {
        case (TelephonyManager.SIM_STATE_ABSENT):
            System.out.println("*******************************************Sim State absent******************************");
            break;
        case (TelephonyManager.SIM_STATE_NETWORK_LOCKED): 
            System.out.println("*******************************************SIM_STATE_NETWORK_LOCKED******************************"+sim);
            break;

        case (TelephonyManager.SIM_STATE_PIN_REQUIRED): 
            System.out.println("*******************************************SIM_STATE_PIN_REQUIRED******************************"+sim);
        break;
        case (TelephonyManager.SIM_STATE_PUK_REQUIRED): 
            System.out.println("*******************************************SIM_STATE_PUK_REQUIRED******************************"+sim);
        break;
        case (TelephonyManager.SIM_STATE_UNKNOWN): 
            System.out.println("*******************************************SIM_STATE_UNKNOWN******************************"+sim);
        break;
        case (TelephonyManager.SIM_STATE_READY): 
        {

        }
    break;
    }
    default: break;
    }

我这样做但是不知道如何在SIM准备就绪时听SIM我想要的状态,以便我可以执行一些代码。当设备启动时,它总是返回“SIM_STATE_UNKNOWN”并导致程序执行完成。

请帮助我实现这一目标。

3 个答案:

答案 0 :(得分:3)

如果您想对Sim更改做出反应,则需要设置一个监听器:

final TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

    tm.listen(new PhoneStateListener() {
        @Override
        public void onServiceStateChanged(ServiceState serviceState) {
            //Code in here executed on Sim State change
        }

        @Override
        public void onDataConnectionStateChanged(int state) {

        }

答案 1 :(得分:1)

你在Android模拟器上试试你的应用程序吗? 也许你必须直接在Android手机上试用你的应用程序,我认为android模拟器不能支持你的应用程序。

答案 2 :(得分:0)

以下代码可帮助您获取 SIM序列号

TelephonyManager mTelephonyMgr =
(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

String sSimSerial = mTelephonyMgr.getSimSerialNumber(); 

在Android清单文件

上设置以下权限

<强> android.permission.READ_PHONE_STATE