2012-08-13 48 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