Android 使用telephonymanager获取sim串口

Android 使用telephonymanager获取sim串口,android,Android,我可以使用telephonymanager获取我的sim卡序列号,代码工作正常。但是,如果没有插入sim卡,它将强制关闭,那么有没有办法处理此异常 private void getAndSaveCurrentID(View view) { TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); // ---get first time SIM card ID

我可以使用telephonymanager获取我的sim卡序列号,代码工作正常。但是,如果没有插入sim卡,它将强制关闭,那么有没有办法处理此异常

    private void getAndSaveCurrentID(View view) {
    TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    // ---get first time SIM card ID ---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "current SIM card ID: saved " + simID,
                Toast.LENGTH_LONG).show();
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("Name", simID.toString());
    editor.commit();
}

02-14 11:27:42.643: E/AndroidRuntime(9674): FATAL EXCEPTION: main
02-14 11:27:42.643: E/AndroidRuntime(9674): Process: com.air.bgusatm, PID: 9674
02-14 11:27:42.643: E/AndroidRuntime(9674): java.lang.IllegalStateException: Could not find a method getAndSaveCurrentID(View) in the activity class com.air.bgusatm.MainActivity for onClick handler on view class android.widget.Button with id 'button1'

如果我用try-cache块包围它,它会工作吗?

您在传递按钮的onClick方法中调用
getAndSaveCurrentID(View)
作为参数删除参数,一切都会工作。您的方法
getAndSaveCurrentID()
没有任何参数

String simID = null;
try{
    simID = tm.getSimSerialNumber();
}catch(Exception e){
}finally{
 if (simID != null)
    Toast.makeText(this, "current SIM card ID: saved " + simID,
            Toast.LENGTH_LONG).show();
SharedPreferences preferences = PreferenceManager
        .getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name", simID.toString());
editor.commit();
}
 private void getAndSaveCurrentID() {
    try{
       TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    // ---get first time SIM card ID ---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "current SIM card ID: saved " + simID,
                Toast.LENGTH_LONG).show();
    SharedPreferences preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("Name", simID.toString());
    editor.commit();
    }catch(Exception e){
        Log.e("Error","error ocurred");
    }
}

希望这有帮助

您可以检查SIM卡是否缺失

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if(telephonyManager.getSimState()!= TelephonyManager.SIM_STATE_ABSENT)
        {
            //your code here
        }

这是我的解决方案,它先检测是否有sim卡,然后调用我的方法,请随意编辑我的答案

public void SimDetectorForGetAndSaveCurrentId(View view) {// save serial
    // fire only if there is sim card inserted
    TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    int simState = telMgr.getSimState();
    switch (simState) {
    case TelephonyManager.SIM_STATE_ABSENT:
        Toast.makeText(getApplicationContext(),
                "please make sure you have a SIM card inserted", Toast.LENGTH_LONG)
                .show();
        break;
    case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
        getAndSaveCurrentID();
        break;
    case TelephonyManager.SIM_STATE_PIN_REQUIRED:
        getAndSaveCurrentID();
        break;
    case TelephonyManager.SIM_STATE_PUK_REQUIRED:
        getAndSaveCurrentID();
        break;
    case TelephonyManager.SIM_STATE_READY:
        getAndSaveCurrentID();
        break;
    case TelephonyManager.SIM_STATE_UNKNOWN:
        Toast.makeText(getApplicationContext(),
                "please make sure you have a SIM card inserted", Toast.LENGTH_LONG)
                .show();
        break;
    }
}

我知道,我删除它只是为了测试异常处理,如果没有sim卡,它将强制关闭。当它没有sim卡时,它将抛出null。您使用此代码得到的异常是什么?请发布您的日志,否则您将收到第一封邮件:(