?????????????????ù???????
???????????? ???????[ 2016/8/8 14:59:12 ] ???????????ù???
	????????????
	????· sdk?????????????????????????????????????????????????Ч
	????· ???????????£?????sdk?????????翨??1?????????????????2?????δ????????????£?sdk????????儼??1????????????????????2?????????2??????????????У???????????
	????· ??????????????й????????????????????????????λ???sdk????????????????????????????sim???????????????????У???????Ч
	????????sim????β????????????????????????????
	<receiver android:name="com.oneplus.security.network.simcard.SimcardStateChangeReceiver"
	android:exported="true"
	android:enabled="true" >
	<intent-filter>
	<action android:name="android.intent.action.SIM_STATE_CHANGED"/>
	</intent-filter>
	</receiver>
	@Override
	public void onReceive (Context context?? Intent intent) {
	String action = intent.getAction();
	if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
	String state = intent.getStringExtra(SimStateListener.SIM_STATE_KEY);
	if (SimStateListener.SS_ABSENT.equals(state)) {
	SimcardStateManager.setShouldAlertSimcardHasPopedOut(context?? true??
	SimcardDataModelInterface.SIM_CARD_ONE_INDEX);
	SimcardStateManager.setShouldAlertSimcardHasPopedOut(context?? true??
	SimcardDataModelInterface.SIM_CARD_TWO_INDEX);
	}
	}
	}
	????· ????????????sim?????????仯??????sim??absent???????????????????????????????(alert_data_change_flag)?true???????????????????????????????????????????????????????????????????????棬?????????????????????????????λalert_data_change_flag?false
	????· ?????????????
	????????????????????????????????????Щ??????ο??????????????
	????????SS_ABSENT????????????????????????????sim??????????SS_ABSENT?????SS_READY????????????????????????????????????κβ?ο????????????????
	????· ?????????????????????????????????????????ο??????????????ο??????????????????????????????????????????????
	???????????????????????
	??????????sim????id???
	?????????????£???????sim????subId?????????????????????β???????μ?sim????????????????????????subId?????????????????????????????????????????????????????subId????????sim???????????????
	??????sim????subId?key???洢???????????subId?????value??Ч???????????????????????????
	????????????????????????????????????subId??????key???洢???ο?CarrierConfigFragment.java
	@Override
	public boolean onPreferenceChange (Preference preference?? Object newValue) {
	if (preference == mProvinceSelection) {
	String newProvince = String.valueOf(newValue);
	if (null != mOperatorPrefModel) {
	mOperatorPrefModel.setProvince(newProvince);
	SimcardInfoSaver.saveSimcardProvinceBySubId(getActivity()?? mSubId?? newProvince);
	}
	return true;
	} else if (preference == mBrandSelection) {
	String newBrand = String.valueOf(newValue);
	if (null != mOperatorPrefModel) {
	mOperatorPrefModel.setBrand(newBrand);
	SimcardInfoSaver.saveSimcardBrandBySubId(getActivity()?? mSubId?? newBrand);
	}
	return true;
	}
	return false;
	}
	???????????sim????????????????????????????????
	???????????????????????????????subId???province??brand???????????Ч???飬??Ч???????????Ч???????棬???′????????????????????????????
	private boolean alertSimcardOneIfNecessary () {
	return getShouldAlertSimcardChange(SimcardDataModelInterface.SIM_CARD_ONE_INDEX?? new SimcardProvinceAndBrandSetter() {
	@Override
	public void setProvinceAndBrand (String province?? String brand) {
	if (null != mOperatorDataModelSimOne) {
	mOperatorDataModelSimOne.setProvince(SimcardDataModelInterface
	.SIM_CARD_ONE_INDEX?? province);
	mOperatorDataModelSimOne.setOperatorBrand(SimcardDataModelInterface
	.SIM_CARD_ONE_INDEX?? brand);
	}
	}
	});
	}
	private boolean alertSimcardTwoIfNecessary() {
	return getShouldAlertSimcardChange(SimcardDataModelInterface.SIM_CARD_TWO_INDEX?? new SimcardProvinceAndBrandSetter() {
	@Override
	public void setProvinceAndBrand (String province?? String brand) {
	if (null != mOperatorDataModelSimTwo) {
	mOperatorDataModelSimTwo.setProvince(SimcardDataModelInterface
	.SIM_CARD_TWO_INDEX?? province);
	mOperatorDataModelSimTwo.setOperatorBrand(SimcardDataModelInterface
	.SIM_CARD_TWO_INDEX?? brand);
	}
	}
	});
	}
	private boolean getShouldAlertSimcardChange (int slotId?? final SimcardProvinceAndBrandSetter
	setter) {
	if (null == mSimcardDataModel) {
	return false;
	}
	final Context c = getActivity();
	if (mCurrentDataSlotId == SimcardDataModelInterface.INVALID_SIM_SLOT_ID) {
	return false;
	}
	if (!SimcardStateManager.getShouldAlertSimcardHasPopedOut(getActivity()?? slotId)) {
	return false;
	}
	boolean shouldAlertSimcardChangeDialog = false;
	if (mSimcardDataModel.isSlotSimInserted(slotId)
	&& mSimcardDataModel.isSlotOperatorSupportedBySdk(slotId)) {
	int subId = SimcardDataModel.staticGetSubIdBySlotId(slotId);
	String province = SimcardInfoSaver.getSimcardProvinceBySubId(getActivity()?? subId);
	String brand = SimcardInfoSaver.getSimcardBrandBySubId(getActivity()?? subId);
	if (SimcardInfoSaver.SIMCARD_BRAND_INVALID_VALUE.equals(brand)
	|| SimcardInfoSaver.SIMCARD_PROVINCE_INVALID_VALUE.equals(province)) {
	LogUtils.LogD(TAG?? "alert slot1 error " + brand + " " + province);
	if (SimcardStateManager.getShouldAlertSimcardHasPopedOut(getActivity()?? slotId)) {
	showReconfigSimcardAlert(c?? slotId);
	shouldAlertSimcardChangeDialog = true;
	} else {
	shouldAlertSimcardChangeDialog = false;
	}
	} else {
	LogUtils.LogD(TAG?? "detect simcard change and reset sdk information on slot 1.");
	setter.setProvinceAndBrand(province?? brand);
	}
	}
	return shouldAlertSimcardChangeDialog;
	}
	private interface SimcardProvinceAndBrandSetter {
	void setProvinceAndBrand(String province?? String brand);
	}
	private void showReconfigSimcardAlert (final Context c?? final int slotId) {
	AlertDialog.Builder builder = new AlertDialog.Builder(c);
	builder.setCancelable(true);
	StringBuilder sb = new StringBuilder();
	sb.append(getSimCardDescriptions(slotId));
	sb.append("
");
	sb.append(c.getText(R.string.detect_simcard_change_please_confirm_config));
	builder.setMessage(sb.toString());
	builder.setPositiveButton(android.R.string.ok?? new DialogInterface.OnClickListener() {
	@Override
	public void onClick (DialogInterface dialog?? int which) {
	startSpecificTrafficConfigSettingsActivity(slotId);
	}
	});
	builder.create().show();
	}
	????????????????????λ??????????????????????????????????????????????У?????????
	@Override
	public void pageInAnim () {
	super.pageInAnim();
	mDataTopView.animtionCircle(true);
	if (null != mOperatorDataModel) {
	mOperatorDataModel.requesetPkgMonthlyUsageAndTotalInByte(mCurrentDataSlotId);
	}
	alertSimcardOneIfNecessary();
	alertSimcardTwoIfNecessary();
	}
	mSimDataUsageQueryButton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick (View v) {
	...
	if (SimcardDataModelInterface.SIM_CARD_ONE_INDEX == mCurrentDataSlotId) {
	if (alertSimcardOneIfNecessary()) {
	return;
	}
	} else if (SimcardDataModelInterface.SIM_CARD_TWO_INDEX == mCurrentDataSlotId) {
	if (alertSimcardTwoIfNecessary()) {
	return;
	}
	} else {
	// CurrentDataSlotId is invalid?? should do nothing but return. actually?? in
	// this circumstances?? data calibrate button is invisible.
	return;
	}
	...
	}
	};
	??????????鼰????
	????· ??sdk?????????????????????????????????????????????????????? ????С???
	????· ????????? ??δ???ù???sim?? ???????????????????У????
	????· ????????????????? ????????????????????????????? ???????????2????????
	????· ??????????????????? a.????????????????????y??? b.??????????????????????y???
	????· ??????ù???sim???????????????????????????????????????λ??????????????sim????????????????????????? ??????????????????????????????????У????????
	????· ?????????£??????????????ù??????????????λ???????????????????????????y??棬?????????????????????????????
	????· ???????£????????δ???ù???????????????????
	????· ???????????á????δ??????????sdk?????????????λ???????????????????????????????δ???ù????????2????????????
	????· ?????ù?????????δ???ù???????й?4?в???????????????????????
	????· δ???ù????????δ???й?4?в???????????????????????????棬???У???????????????
	??????Ч??
	??????????ù???sim???????????????????????????????????????????
??????
					
					???·???
App??С????H5?????????????????Щ??
2024/9/11 15:34:34?????????????????????????
2024/9/10 11:13:49P-One ???????????????????????????????????????
2024/9/10 10:14:12???????????????????????????
2024/9/9 18:04:26??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44
					
			
								
								
								
								
								
								
								
								
								
								
				
sales@spasvo.com