关于sms center number 中心默认号码是如何设置的

刚入门的菜鸟,android 4.4 不知道短信中心的号码默认值是如何设置的


首先我找到了将短信中心号码设置到控件上显示的地方:

文件名:SimSettingPreferenceActivity.java

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        mPhoneId = this.getIntent().getIntExtra(Phone.PHONE_ID, TelephonyManager.getDefaultPhoneId());
        mTelephonyManager = MmsApp.getApplication().getTelephonyManager(mPhoneId);
        if (MessageUtils.OS_DEBUG) {
        Log.d(TAG, "onCreate() -->> Start activity for phoneId = " + mPhoneId);
        }
        addPreferencesFromResource(R.xml.setting_sim_preferences);
        createResource();
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
                | ActionBar.DISPLAY_HOME_AS_UP);
        setMessagePreferences();
        //modify for Bug 620828 begin
        mSoftKeyPanel=new SoftKeyPanel(this);
        mSoftKeyPanel.setCaption(null,getString(R.string.menu_select), getString(R.string.menu_back));
        //modify for Bug 620828 end
    private void createResource() {
        mManageSimPref = findPreference("pref_key_manage_sim_messages");
        mSmsDeliveryReportPref = (CheckBoxPreference) findPreference("pref_key_sms_delivery_reports");
        mStoreSmsOnSim = (CheckBoxPreference) findPreference("pref_key_store_sms_on_sim");
        mMmsDeliveryReportPref = (CheckBoxPreference)findPreference("pref_key_mms_delivery_reports");
        mMmsReadReportPref = (CheckBoxPreference)findPreference("pref_key_mms_read_reports");
        mSmscPref = findPreference("pref_key_sim_smsc");
        mMmsAutoCheckPref = (CheckBoxPreference)findPreference("pref_key_mms_auto_retrieval");
        mMmsDuringPref = (CheckBoxPreference)findPreference("pref_key_mms_retrieval_during_roaming");
        mMmsValidityPref = (ListPreference)findPreference("pref_key_mms_validity_input_sim");
        mMmsValidityPref.setOnPreferenceChangeListener(this);
        mSmsValidityPref = (ListPreference)findPreference("pref_key_sms_validity");
        mSmsValidityPref.setOnPreferenceChangeListener(this);

        mMmsPriorityPref = (ListPreference)findPreference("pref_key_mms_priority");
        mMmsPriorityPref.setOnPreferenceChangeListener(this);
    }
 private void setMessagePreferences() {
..........................
        if (isMultiSim && isValidPhoneId(mPhoneId)) {
            mSmscPref.setTitle(getString(R.string.pref_title_manage_simx_smsc, mPhoneId+1));
            mSmscPref.setSummary(getSmscString(mPhoneId));

        } else {
            mSmscPref.setSummary(getSmscString(-1));
        }

.......................
}

    private String getSmscString(int phoneId) {
        String smscStr = "";
        // SPRD: Modify for bug261680 @{
        TelephonyManager telephonyManager;
        if (phoneId == -1) {
            telephonyManager = MmsApp.getApplication().getTelephonyManager();
        } else {
            telephonyManager = MmsApp.getApplication().getTelephonyManager(phoneId);
        }
        if (!mSupportOrange) {
            smscStr = telephonyManager.getSmsc();  //短信中心号码默认获取处
            if ((smscStr == null || smscStr.equals("") || smscStr.equals("refresh error"))
                    && isCMCCSim(phoneId)) {
                smscStr = CMCC_DEFAULT_SMSC;
            }
        }else{
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(SimSettingPreferenceActivity.this);
            if (TelephonyManager.isMultiSim()) {
                smscStr = sharedPreferences.getString(
                        SimSettingPreferenceActivity.SMS_CENTER_ACTIVATED_STR_SIMX[phoneId], "");
            } else {
                smscStr = sharedPreferences.getString(
                                SimSettingPreferenceActivity.SMS_CENTER_ACTIVATED_STR, "");
            }
        }
        // @}

        return smscStr;
    }

在TelephonyManager.java中:

    public String getSmsc() {
        try {
            return getISprdTelephony().getSmsc(); //getISprdTelephony 方法返回的是一个ISprdTelephony.aidl服务,实现getISprdTelephony.aidl的类是:SprdPhoneInterfaceManger.java
        } catch (RemoteException ex) {
            return null;
        } catch (NullPointerException ex) {
            return null;
        }
    }

在SprdPhoneInterfaceManager.java中真正去获得Smsc:

    public String getSmsc() {
        enforceModifyPermission();
        final GetSetSMSC getSMSC = new GetSetSMSC(mPhone, null);
        getSMSC.start();
        return getSMSC.getSmsc();
    }

    public boolean setSmsc(String smscAddr) {
        enforceModifyPermission();
        final GetSetSMSC getSMSC = new GetSetSMSC(mPhone, smscAddr);
        getSMSC.start();
        return getSMSC.setSmsc();
    }

    private static class GetSetSMSC extends Thread {

        private final Phone mPhone;
        private final String mSmscStr;
        private boolean mDone = false;
        private String mResult;
        private boolean bResult = false;

        private Handler mHandler;

        // For async handler to identify request type
        private static final int QUERY_SMSC_DONE = 100;
        private static final int UPDATE_SMSC_DONE = 101;

        public GetSetSMSC(Phone phone, String SmscStr) {
            mPhone = phone;
            mSmscStr = SmscStr;
        }

        @Override
        public void run() {
            Looper.prepare();
            synchronized (GetSetSMSC.this) {
                mHandler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        AsyncResult ar = (AsyncResult) msg.obj;
                        switch (msg.what) {
                            case QUERY_SMSC_DONE:
                                Log.d(LOG_TAG, "[smsc]QUERY_SMSC_DONE");
                                synchronized (GetSetSMSC.this) {
                                    if (ar.exception == null) {
                                        mResult = (String)ar.result;
                                    } else {
                                        mResult = "refresh error";
                                    }
                                    mDone = true;
                                    GetSetSMSC.this.notifyAll();
                                }
                                getLooper().quit();
                                break;
                            case UPDATE_SMSC_DONE:
                                Log.d(LOG_TAG, "[smsc]UPDATE_SMSC_DONE");
                                synchronized (GetSetSMSC.this) {
                                    bResult = (ar.exception == null);
                                    mDone = true;
                                    GetSetSMSC.this.notifyAll();
                                }
                                getLooper().quit();
                                break;
                        }
                    }
                };
                GetSetSMSC.this.notifyAll();
            }
            Looper.loop();
        }

        synchronized String getSmsc() {

            while (mHandler == null) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }

            mPhone.getSmscAddress(mHandler.obtainMessage(QUERY_SMSC_DONE));

            while (!mDone) {
                try {
                    Log.d(LOG_TAG, "[smsc]wait get for done");
                    wait();
                } catch (InterruptedException e) {
                    // Restore the interrupted status
                    Thread.currentThread().interrupt();
                }
            }
            Log.d(LOG_TAG, "[smsc]get done");
            return mResult;
        }

        synchronized boolean setSmsc() {

            while (mHandler == null) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }

            mPhone.setSmscAddress(mSmscStr, mHandler.obtainMessage(UPDATE_SMSC_DONE));

            while (!mDone) {
                try {
                    Log.d(LOG_TAG, "[smsc]wait set for done");
                    wait();
                } catch (InterruptedException e) {
                    // Restore the interrupted status
                    Thread.currentThread().interrupt();
                }
            }
            Log.d(LOG_TAG, "[smsc]set done. result = "+bResult);
            return bResult;
        }
    }

最后走到这里就没思路了,按我的思路应该是在开机初始化的时候,系统会默认setSmsAddress()设置一个地址最后通知UPDATE_SMSC_DONE,

最后到RIL那边发送.最后就可以在getSmsc()中getSmscAddress(mHandler.obtainMessage(QUERY_SMSC_DONE))中获取一个String类型的mResult。

可是代码全局搜索setSmscAddress没有找到相关紧要的设置项,是从SIM卡中自动获取的???还是我的思路不对呢?


不过最后问了同事,短信中心号码不要改,改了可能会出问题,客户需求不靠谱啊,关键我自己想知道结果是哪里给的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值