2012-08-13 79 views
0

嗨,朋友我正在使用下面的代碼來檢測SIM卡的變化,但無法獲得結果。 請建議我在哪裏犯錯。無法檢測到SIM卡在android中的變化

我使用MainActivity.java類來存儲SIM msisdn。像這樣

public class MainActivity extends Activity { 
String FILENAME = "old_file.txt"; 
int simstatus; 
String msisdn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    simstatus = tManager.getSimState(); 
    if (simstatus != TelephonyManager.SIM_STATE_ABSENT) { 
     System.out.println("--------SIM Present:" + simstatus); 
     msisdn = tManager.getLine1Number(); 
     FileOutputStream fos; 
     try { 
      fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
      fos.write(msisdn.getBytes()); 
      System.out.println("---------Data written to files is:" 
        + msisdn); 
      fos.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
    } 

} 

而對於接收重新啓動事件,我正在使用這樣的SIMTestReceiver類。

public class SIMTestReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
     Intent CompareSimServiceIntent = new Intent(context,TestDATAScreen.class); 
     context.startService(CompareSimServiceIntent); 
    } 

} 

而爲了比較舊SIM卡和新SIM卡,我正在使用TestDATAScreen服務類。

public class TestDATAScreen extends Service { 

String FILENAME = "old_file.txt"; 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, final int startId) { 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
    TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    try { 
     FileInputStream fis = openFileInput(FILENAME); 
     InputStreamReader in = new InputStreamReader(fis); 
     BufferedReader br = new BufferedReader(in); 
     String data = br.readLine(); 
     System.out.println("---Data Read From File is:" + data); 
     String newsiminfo = tManager.getLine1Number(); 
     System.out.println("---New SIM no is:" + newsiminfo); 
     if (data.equals(tManager.getLine1Number())) { 
      System.out.println("------Old sim Present:"); 

      Toast.makeText(this, "Old SIM", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(this, "New SIM", Toast.LENGTH_LONG).show(); 
      SmsManager smsMngr = SmsManager.getDefault(); 
      String destinationaddress = "8689908070"; 
      String scAddress = null; 
      String text = "New Sim Is Inserted In Your Device"; 
      PendingIntent sentIntent = null; 
      PendingIntent deliveryIntent = null; 
      smsMngr.sendTextMessage(destinationaddress, scAddress, text, 
        sentIntent, deliveryIntent); 
      System.out.println("-----SMS Send"); 
     } 

    } catch (Exception e) { 

    } 
    return startId; 

} 
+0

您如何檢測模擬細節 – Rakshi 2012-08-13 11:16:37

+0

是的,我能夠檢測到SIM細節。 – 2012-08-13 11:37:47

+0

@Rakshi通過使用這個TelephonyManager tManager =(TelephonyManager)這個 .getSystemService(Context.TELEPHONY_SERVICE); String serial = tManager.getLine1Number(); – 2012-08-13 12:05:06

回答

0

我找到了解決方案。其實使用tManager.getSimSerialNumber()比較序列號解決我的問題。 AS tManager.getLine1Number()對此問題沒有保證,因爲電話號碼並非物理存儲在所有SIM卡上,或從網絡廣播到手機。

1

您先保存SIM卡,然後比較所保存的SIM卡與當前的SIM卡。你永遠不會加載舊的sim的序列號。

+0

是的。但是你用新的串口覆蓋舊的串口。加載舊序列號之前。加載舊的串口後,應該保存新的串口。 – 2012-08-13 11:12:18