一、目标。
使用TelephonyManager对象获取手机相关信息,用SharedPreferences对象保存配置信息。
二、代码实现。
1、为“绑定SIM卡”按钮添加id(取名setup_wizard_bandingSimCard),用于在Activity(SetupWizard_ui_2.java)中绑定监听器。
2、在按钮所在的Activity中,新建手机管理对象(TelephonyManager)和“绑定SIM卡”按钮对象(自定义的组件SettingItemView,取名setup_wizard_bandingSimCard),通过getSystemService(String name)实例化新建的手机管理对象(TelephonyManager),参数String name为TELEPHONY_SERVICE。通过按钮对象的findViewById方法找到布局文件中的按钮,并为其绑定点击事件监听器(setOnClickListener(OnClickListener l))。
3、在新建的抽象方法类(SlideActivity.java)中,由于继承它的子类中均会使用SharedPreferences对象,所以在抽象方法类中直接新建protect类型的SharedPreferences对象(取名sp),并通过getSharedPreferences(String name, int mode)方法实例化,可参考主界面(HomeActivity.java)代码的实例化方法。
4、在“绑定SIM卡”按钮所在的Activity中,通过SharedPreferences对象(sp)的getString(string)方法获取config中绑定SIM卡的参数(SimSerialNumber)值,通过if...else...语句先判断是否已经绑定SIM卡。若已绑定(即SimSerialNumber对应的值非空),则通过“绑定SIM卡”按钮(setup_wizard_bandingSimCard)的setChecked(boolean)方法设置为true。否则为false。
判断是否已经绑定SIM卡的方法代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 String SIM = sp.getString("SimSerialNumber", null); 2 if (TextUtils.isEmpty(SIM)) { 3 setup_wizard_bandingSimCard.setChecked(false); 4 }else { 5 setup_wizard_bandingSimCard.setChecked(true); 6 }
5、在绑定SIM卡”按钮的监听器中:
①.通过SharedPreferences对象的editor()方法获得编辑器对象(Editor);
②.在onclick()方法中,通过TelephonyManager对象的getSimSerialNumber()方法获得String类型的SIM卡序列号(20位),需要获得“读取手机状态”(READ_PHONE_STATE)权限。
③.通过if..else..语句判断“绑定SIM卡”按钮(setup_wizard_bandingSimCard)是否被选中(isChecked)。如果选中则点击时通过setChecked(boolean)方法设置其为未选中(false),同时通过编辑器对象(editor)的putString(String key, String value)方法设置config中的相关参数(SimSerialNumber)为空(null)。反之设置按钮为选中,config中相关参数(SimSerialNumber)为②中获得SIM卡序列号。
④.通过编辑器对象(editor)的commit()方法提交。
监听器代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 setup_wizard_bandingSimCard.setOnClickListener(new OnClickListener() { 2 3 Editor editor = sp.edit(); 4 5 @Override 6 public void onClick(View v) { 7 //读取并保存SIM卡序列号 8 String SimSerialNumber = telephonyManager.getSimSerialNumber(); 9 if(setup_wizard_bandingSimCard.isChecked()){ 10 // 11 setup_wizard_bandingSimCard.setChecked(false); 12 editor.putString("SimSerialNumber", null); 13 }else{ 14 setup_wizard_bandingSimCard.setChecked(true); 15 editor.putString("SimSerialNumber", SimSerialNumber); 16 } 17 editor.commit(); 18 } 19 });
6、注意以上代码的先后顺序,如要先加载父类,才能使用SharedPreferences对象,要先找到控件才能进行相关操作!