2016-02-14 70 views
1

我能够使用telephonymanager获得sim卡的序列号,代码正常工作。但是,如果没有插入SIM卡,它会关闭,那么有什么办法来处理这个异常?使用telephonymanager获取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' 

它会工作,如果我围绕它与一个尝试缓存块?

回答

0
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(); 
} 
+0

SIMID不能被解析为一个变量 – Felicia

+0

TM解决不了 – Felicia

+0

其投掷空当它不具有SIM卡 – dileep

0

你在你的按钮,通过view为参数删除参数,一切都应该工作的onclick方法调用getAndSaveCurrentID(View)。您的方法getAndSaveCurrentID()没有任何参数。

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"); 
    } 
} 

希望这有助于

+0

我知道,我删除它只是为了测试异常handelling,它强制关闭,如果没有SIM卡卡号 – Felicia

+0

你的答案不起作用,请检查我的卡号 – Felicia

1

您可以检查SIM不存在或不是。

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

这里是我的sollution,它检测是否第一有一个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; 
    } 
} 
+0

你用这段代码得到了什么异常?请张贴您的logcat或您收到第一张贴:( –