Search code examples
androidtelephonymanager

How can I check whether the Sim Card is available in an android device?


I need help checking whether a device has a sim card programatically. Please provide sample code.


Solution

  • Use TelephonyManager.

    http://developer.android.com/reference/android/telephony/TelephonyManager.html

    As Falmarri notes, you will want to use getPhoneType FIRST of all, to see if you are even dealing with a GSM phone. If you are, then you can also get the SIM state.

    TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        int simState = telMgr.getSimState();
                switch (simState) {
                    case TelephonyManager.SIM_STATE_ABSENT:
                        // do something
                        break;
                    case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
                        // do something
                        break;
                    case TelephonyManager.SIM_STATE_PIN_REQUIRED:
                        // do something
                        break;
                    case TelephonyManager.SIM_STATE_PUK_REQUIRED:
                        // do something
                        break;
                    case TelephonyManager.SIM_STATE_READY:
                        // do something
                        break;
                    case TelephonyManager.SIM_STATE_UNKNOWN:
                        // do something
                        break;
                }
    

    EDIT:

    Starting at API 26 (Android O Preview) you can query the SimState for individual sim slots by using getSimState(int slotIndex) ie:

    int simStateMain = telMgr.getSimState(0);
    int simStateSecond = telMgr.getSimState(1);
    

    official documentation

    If you're developing with and older api, you can use TelephonyManager's

    String getDeviceId (int slotIndex)
    //returns null if device ID is not available. ie. query slotIndex 1 in a single sim device
    
    int devIdSecond = telMgr.getDeviceId(1);
    
    //if(devIdSecond == null)
    // no second sim slot available
    

    which was added in API 23 - docs here