安卓SIM卡的详细讲解

###一、绑定、解绑SIM卡
绑定SIM卡的原理很简单,首先通过getSystemService(TELEPHONY_SERVICE),获取TelephoneManager对象,然后通过该对象的getSimSerialNumber方法获取SIM卡的序列号。获取SIM卡序列号后我们将该序列号保存在SharedPreferences中即可。

// 需要权限:android.permission.READ_PHONE_STATE
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
String serialNumber = tm.getSimSerialNumber();// 获取sim卡序列号
System.out.println("序列号是:" + serialNumber);
// 将序列号保存在本地
PrefUtils.putString(Setup2Activity.this, "sim_number",
serialNumber);

获取sim卡号后,我们需要将其存储起来,便于后期卡号变更时,可以提醒用户。
###二、检查SIM卡是否更换
由于需要在手机开机时,检查SIM卡是否被更换,因此需要定义一个监听开机的广播。当手机重启的时候检查当前SIM卡的序列号是否跟已经绑定的手机SIM卡序列号是否一致。具体步骤如下所示。

public class BootCompleteReceiver extends BroadcastReceiver {
private TelephonyManager tm;
private SharedPreferences sp;
@Override
public void onReceive(Context context, Intent intent) {
/*
 * 从sp中获取是否开启手机保护信息
 * 如果没有开启则直接返回
 */
sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
boolean proteccting = sp.getBoolean("protectting", false);
if (!proteccting) {
return ;
}
tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
/*
 * 从sp中获取已经绑定的sim卡序列号
 * 如果没有绑定sim卡则返回
 */
String sim = sp.getString("sim", "");
if (TextUtils.isEmpty(sim)) {
System.out.println("SIM卡未绑定");
Toast.makeText(context, "SIM卡未绑定", Toast.LENGTH_SHORT).show();
return;
}else{
/*
 * 通过TelephonyManager对象获取当前sim卡的序列号
 * 如果当前的sim卡和sp中的sim卡序列号一致则可以断定SIM卡没有更换
 * 如果两次的SIM卡序列号不一致,则断定SIM已经更换,这时可以根据用户的设置给安	  * 全号码发送短信,通知SIM卡已经更换
 */
String serialNumber = tm.getSimSerialNumber();
if (sim.equals(serialNumber)) {
System.out.println("sim卡依然没变");
Toast.makeText(context, "SIM卡未更换", Toast.LENGTH_SHORT).show();
}else {
//发送短信给安全号码
System.out.println("sim卡已经变更");
Toast.makeText(context, "SIM卡已经更换", Toast.LENGTH_SHORT).show();
SmsManager.getDefault().sendTextMessage(sp.getString("saveNumber", ""), null, "sim 卡已经更改,from antaojin", null,null);
System.out.println("已经给安全号码发送短信"+sp.getString("saveNumber", ""));
}
}
}
}

上述代码中,实现了在开机广播中检查本地存储的SIM卡是否与当前SIM卡的序列号一致,若不一致则发送信息给安全号码。
注意配置权限和注册广播:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="com.itheima.mobileSafe.receiver.BootCompleteReceiver" >
       <intent-filter>
             <action android:name="android.intent.action.BOOT_COMPLETED" />
       </intent-filter>
 </receiver>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值