zoukankan      html  css  js  c++  java
  • 解决:更改短信中心号码不能及时更新显示

    【测试步骤】:
    1、进入短信界面
    2、菜单-设置
    3、修改短信中心号码(Set the SIM's smsc number) 保存
    【测试结果】:提示保存成功,但是号码没有改变,退出重新进入设置才会看到号码更新

    【预期结果】:提示保存成功,号码变为修改过的号码

    相关Activity:通过Logcat中I/ActivityManager(  896):我们可以定位到该类-MessagingPreferenceActivity;

    相关控件:mSmscPrefList.add(pref);

    根据分析我们发现在MessagingPreferenceActivity的registerReceiver()方法中动态注册了广播接收器对设置短信中心号码的写卡操作进行监听,但是在写卡成功后并没有对页面中短信中心号码进行更新,因此我们添加以下代码(红色+加粗部分)为添加代码。

     private void registerReceiver() {
            if (mReceiver != null) return;
            mReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    String action = intent.getAction();
                    if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(action)) {
                        updateSMSCPref(ALL_SUB, isAirplaneModeOn());
                        Message msg = new Message();
                        msg.what = AIR_PLANE_MODE_CHANGED;
                        msg.arg1 = (isAirplaneModeOn() ? AIR_PLANE_MODE_ENABLE : AIR_PLANE_MODE_DISABLE);
                        mAirPlaneModeHandler.sendMessage(msg);
                    /*AddBy:yabin.huang BugID:SWBUG00029352 Date:20140521*/
                    } else if(TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)){
                        if(isSimReady())
                        updateSMSCPref(ALL_SUB, isAirplaneModeOn());
                    } else if (NOTIFY_SMSC_ERROR.equals(action)) {
                        showToast(R.string.set_smsc_error);
                    } else if (NOTIFY_SMSC_SUCCESS.equals(action)) {
                        showToast(R.string.set_smsc_success);
                        int sub = intent.getIntExtra(SUB, 0);
                        String summary = intent.getStringExtra(SMSC);

                        Log.d("bill","summary--"+summary);
                        mSmscPrefList.get(sub).setSummary(summary);
                    } else if (NOTIFY_SMSC_UPDATE.equals(action)) {
                        int sub = intent.getIntExtra(SUB, 0);
                        if(TextUtils.isEmpty(mSmscPrefList.get(sub).getSummary())){
                            String summary = intent.getStringExtra(SMSC);
                            if(summary==null||summary.length()==0){
                                updateSMSCPref(ALL_SUB, isAirplaneModeOn());
                                mSmscPrefList.get(sub).setEnabled(false);
                                mSmscPrefList.get(sub).setSummary(null);
                            }else{
                                mSmscPrefList.get(sub).setEnabled(true);
                                mSmscPrefList.get(sub).setSummary(summary);
                            }
                        }else{
                            mSmscPrefList.get(sub).setEnabled(true);
                        }
                    }
                }
            };

            IntentFilter filter = new IntentFilter();
            /*AddBy:yabin.huang BugID:SWBUG00029352 Date:20140521*/
            filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
            filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
            filter.addAction(NOTIFY_SMSC_ERROR);
            filter.addAction(NOTIFY_SMSC_SUCCESS);
            filter.addAction(NOTIFY_SMSC_UPDATE);
            registerReceiver(mReceiver, filter);
        }


  • 相关阅读:
    Windows8 自制DatePicker
    Windows8 商店支付功能
    通过(Node Js||.Net)基于HTML5的WebSocket实现实时视频文字传输(上)
    Windows8 检测网络
    Windows8 推送通知
    Windows8&Windows Phone 做一个图片效果
    js 两种时间数字字符串格式
    使用Homebrew安装Git(Mac)
    JavaScript核心参考教程客户端JavaScript
    MVC模式浅谈
  • 原文地址:https://www.cnblogs.com/bill-technology/p/4130910.html
Copyright © 2011-2022 走看看