2011-02-08 114 views
6

我正在開發基本上取決於SIM卡狀態的Android自動啓動應用程序。當我的應用程序自動啓動時,我需要它來檢查SIM卡的更改位置。之後,我通過獲取共享偏好將當前SIM與過去SIM相比較。但是,獲取新SIM卡的值時,該應用程序返回空指針異常。Android電話管理器檢測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」並導致程序執行完成。

請幫我實現這一點。

回答

0

下面的代碼將幫助您獲取SIM序列號

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

String sSimSerial = mTelephonyMgr.getSimSerialNumber(); 

設置在Android清單以下權限文件

android.permission.READ_PHONE_STATE

+0

您好..我沒有任何問題,同時獲得SIM卡沒有..我想在SIM卡狀態的反應.. – 2011-02-08 14:00:58

1

你試試你的應用程序在Android模擬器? 也許你必須直接在android手機上試用你的應用程序,我認爲android模擬器不能支持你的應用程序。

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) { 

     }