一、目标
1、利用广播接收者(手机重启时会发出相应广播)获取开机时的SIM序列号,与已经保存着的比较。根据比较结果完成相应操作。
2、(可选)强制在防盗设置向导第二步中要求绑定SIM卡后才可进行下一步设置。
3、实现从另一个Activity中获取数据,即点击”选择联系人“人后跳至新建的类(选择联系人)中,并从中获取联系人数据。
二、代码实现。
1、在程序包下新建包(取名com.example.mobilesafe.receiver),用于接收广播。在新建包下新建类(取名BootCompleteReceiver.java)并继承广播接收者(BroadcastReceiver)。
2、在配置文件(AndroidManifest.xml)中注册新建的广播接收类(取名BootCompleteReceiver.java)。<activity>标签下新建接收者<receiver>标签,名称(android:name)为新建广播接受类的全路径名称,<receiver>标签下新建意图过滤标签<intent-filter>,意图过滤标签<intent-filter>中新建动作标签<action>,动作标签<action>中需要关注的广播名称(android:name)为android.intent.action.BOOT_COMPLETED。
广播注册代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <receiver android:name="com.example.mobilesafe.receiver.BootCompleteReceiver" > 2 <intent-filter> 3 <action android:name="android.intent.action.BOOT_COMPLETED" /> 4 </intent-filter> 5 </receiver>
3、在新建的广播接收类(BootCompleteReceiver.java)中,通过SharedPreferences对象获取已经保存的文件(config)中SIM的序列号(配置参数为SimSerialNumber),通过TelephonyManager对象获取当前SIM序列号,然后进行比较。根据比较结果进行相应操作。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 package com.example.mobilesafe.receiver; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 import android.content.SharedPreferences; 7 import android.telephony.TelephonyManager; 8 import android.widget.Toast; 9 10 public class BootCompleteReceiver extends BroadcastReceiver { 11 12 private SharedPreferences sp; 13 private TelephonyManager tm; 14 15 @Override 16 public void onReceive(Context context, Intent intent) { 17 sp = context.getSharedPreferences("config", context.MODE_PRIVATE); 18 tm = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); 19 //获取已保存了的SIM卡序列号 20 String savedSIM = sp.getString("SimSerialNumber", null); 21 //获取当前SIM卡序列号 22 String newSIM = tm.getSimSerialNumber(); 23 if(newSIM.equals(savedSIM)){ 24 //序列号相等 25 26 }else{ 27 //序列号不相等 28 } 29 } 30 }
4、(可选)强制要求绑定SIM卡。在向导第二步的Activity主代码的滑向下一步方法(slideNext() )中,同时sp获取getString获取配置文件(config)中SIM绑定情况的参数(SimSerialNumber)的值,如果返回空,则不可进入下一步。
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 public void slideNext() { 2 3 String sim = sp.getString("SimSerialNumber", null); 4 if(TextUtils.isEmpty(sim)){ 5 Toast.makeText(this, "SIM卡未绑定", 0).show(); 6 return; 7 } 8 Intent intent = new Intent (SetupWizard_ui_2.this,SetupWizard_ui_3.class); 9 startActivity(intent); 10 finish(); 11 overridePendingTransition(R.anim.tran_in, R.anim.tran_out); 12 }
5、点击”选择联系人“按钮进入选择联系人Activity,并最后从该Activity中获取数据。
①.为选择联系人设置点击事件;②.在点击事件方法中通过Intent连接两个Activity(向导设置第三步、选择联系人);③.通过startActivityForResult(Intent intent, int requestCode)方法启动,参数中intent为连接两个Activity的意图, int requestCode为返回的结果码,这里先设置为0.
点击事件方法
public void selectcontact(View view){
Intent intent = new Intent(SetupWizard_ui_3.this,SelectContactActivity.class);
startActivityForResult(intent, 0);
}