如何在sim cards的preferences sim中添加一个OFF项,来实现和SystemUi中下拉中的data connection相同的功能(关闭当前卡的数据连接)?
在SimDialogActivity.java中修改:
1、setDefaultDataSubId(content,subid)方法中
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);//modify by dino for Bug #168346 begin
//miscExt.setDefaultDataEnable(context, subId);
//simExt.setDataState(subId);
//subscriptionManager.setDefaultDataSubId(subId);
//simExt.setDataStateEnable(subId);
获取得到telephonyManager对象
TelephonyManager telephonyManager = TelephonyManager.from(context);
获取当前卡的数据连接的布尔值(如果选中卡1或者卡2为true否则false)
int preSubId = subscriptionManager.getDefaultDataSubId();boolean enableBefore = telephonyManager.getDataEnabled();
获取默认数据连接卡号
Log.d(TAG, "setDefaultDataSubId flag: " + enableBefore + ", subId: "+ subId + ", preSubId: " + preSubId);
Log.d(TAG, "setDefaultDataSubId subscriptionManager.isValidSubscriptionId(subId) : " + subscriptionManager.isValidSubscriptionId(subId));
判断卡数是否为正数(isValidSubscriptionId如果卡的数量大于-1返回true)
if (subscriptionManager.isValidSubscriptionId(subId)) {
设置默认的(选中的)数据连接
if (subId != preSubId){subscriptionManager.setDefaultDataSubId(subId);
判断当前卡数是否唯一相等(一张卡两个值必定相等,两张卡需判断当前默认和preSubId是否相等)
if (enableBefore) {
设置当前卡开启数据连接
telephonyManager.setDataEnabled(subId, true);telephonyManager.setDataEnabled(preSubId, false);
设置切换前的卡的数据关闭连接
}
telephonyManager.setDataEnabled(subId, true);} else {
若subid==preSubId直接设置开启数据连接
}
}
2、添加一个方法setDataConnectionOff(context,subId)和1很类似不同就在if条件位置。
private static void setDataConnectionOff(final Context context, final int subId) {
ISettingsMiscExt miscExt = UtilsExt.getMiscPlugin(context);
ISimManagementExt simExt = UtilsExt.getSimManagmentExtPlugin(context);
if (TelecomManager.from(context).isInCall()) {
String textErr =
context.getResources().getString(R.string.default_data_switch_err_msg1);
textErr = miscExt.customizeSimDisplayString(textErr, subId);
Toast.makeText(context, textErr, Toast.LENGTH_SHORT).show();
return;
}final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
TelephonyManager telephonyManager = TelephonyManager.from(context);
boolean enableBefore = telephonyManager.getDataEnabled();//int preSubId = subscriptionManager.getDefaultDataSubId();
Log.d(TAG, "setDataConnectionOff flag: " + enableBefore + ", subId: "+ subId);
if (subscriptionManager.isValidSubscriptionId(subId)) {
if (enableBefore) {subscriptionManager.setDefaultDataSubId(subId);
因为这是一个单独的dialog而不是卡,所以不许要判断subId和preSubId,直接关闭当前卡的网络就好
telephonyManager.setDataEnabled(subId, false);
}
}
3、在CreateDialog()中
在点击cellular data选择使用那张卡作为数据连接,当点击OFF时获取为空。所以需要添加判空条件,并关闭数据连接。
public void onClick(DialogInterface dialog, int value) {
final SubscriptionInfo sir;
switch (id) {
case DATA_PICK:
sir = subInfoList.get(value);
if (null == sir){
setDataConnectionOff(context, subscriptionManager.getDefaultDataSubId());
} else if (!mExt.switchDefaultDataSub(context, sir.getSubscriptionId())) {
setDefaultDataSubId(context, sir.getSubscriptionId());
}
break;
case CALLS_PICK:
ArrayList<SubscriptionInfo> callsSubInfoList = new ArrayList<SubscriptionInfo>();4、CreateDialog.java
在点击Cellular data是弹出dialog中添加一条OFF点击item
ArrayList<SubscriptionInfo> smsSubInfoList = new ArrayList<SubscriptionInfo>();
if (id == CALLS_PICK) {
final TelecomManager telecomManager = TelecomManager.from(context);
final Iterator<PhoneAccountHandle> phoneAccounts =
telecomManager.getCallCapablePhoneAccounts().listIterator();
if (telecomManager.getCallCapablePhoneAccounts().size() > 1) {
list.add(getResources().getString(R.string.sim_calls_ask_first_prefs_title));
callsSubInfoList.add(null);
}
while (phoneAccounts.hasNext()) {
final PhoneAccount phoneAccount =
telecomManager.getPhoneAccount(phoneAccounts.next());
list.add((String)phoneAccount.getLabel());
if (phoneAccount.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION) &&
TextUtils.isDigitsOnly(phoneAccount.getAccountHandle().getId())) {
final String phoneAccountId = phoneAccount.getAccountHandle().getId();
final SubscriptionInfo sir = Utils.findRecordBySubId(context,
Integer.parseInt(phoneAccountId));
callsSubInfoList.add(sir);
} else {
callsSubInfoList.add(null);
}
}
mExt.customizeListArray(list);
mExt.customizeSubscriptionInfoArray(callsSubInfoList);
} else if (id == SMS_PICK) {
initSmsData(list, subInfoList, selectableSubInfoLength, smsSubInfoList);
} else {
for (int i = 0; i < selectableSubInfoLength; ++i) {
final SubscriptionInfo sir = subInfoList.get(i);
CharSequence displayName = sir.getDisplayName();
if (displayName == null) {
displayName = "";
}
list.add(displayName.toString());
}
if (selectableSubInfoLength > 0) {
list.add(“OFF”);
subInfoList.add(null);
}
}
5、在CreateDialog()中的getView()中添加红色的
作用是不显示图片
if (mDialogId == SMS_PICK &&
position > SubscriptionManager.from(mContext)
.getActiveSubscriptionInfoCount()) {
Drawable drawable = mExt.getSmsAutoItemIcon(mContext);
holder.icon.setImageDrawable(drawable);
Log.d(TAG, "mDialogId: " + mDialogId + ", position: " + position);
} else if (mDialogId == CALLS_PICK) {
setAccountBitmap(holder, position);
holder.icon.setImageDrawable(getResources()} else if(mDialogId ==DATA_PICK){
holder.icon.setImageDrawable(null );
} else {
.getDrawable(R.drawable.ic_live_help));
}
在SimSettings.java中的修改
1、添加相关的包
import android.database.ContentObserver;
import android.os.Handler;
import android.provider.Settings;
import android.content.ContentResolver;
2、创建对象
private DataDefaultSimObserver mDataDefaultSimObserver;
protected ContentResolver mResolver;
3、在updateCellularDataValues()中
private void updateCellularDataValues() {
final Preference simPref = findPreference(KEY_CELLULAR_DATA);
TelephonyManager mTelephonyManager = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
boolean enableBefore = mTelephonyManager.getDataEnabled();
if (simPref != null) {
SubscriptionInfo sir = Utils.findRecordBySubId(getActivity(),
mSubscriptionManager.getDefaultDataSubId());
simPref.setTitle(R.string.cellular_data_title);
if (DBG) log("[updateCellularDataValues] mSubInfoList=" + mSubInfoList);
sir = mExt.setDefaultSubId(getActivity(), sir, 2);
if (sir != null) {
if (enableBefore) {
simPref.setSummary(sir.getDisplayName());
} else {
simPref.setSummary(R.string.sim_data_connection_off_title);
}
} else if (sir == null) {
simPref.setSummary(R.string.sim_selection_required_pref);
}
simPref.setEnabled(mSelectableSubInfos.size() >= 1 &&
(!mIsAirplaneModeOn) &&
(!isCapabilitySwitching()));
}
}
4、在onResume()中添加
if (mDataDefaultSimObserver != null) {
mDataDefaultSimObserver.unregister();
}
mDataDefaultSimObserver = new DataDefaultSimObserver(new Handler(), getActivity());
mDataDefaultSimObserver.register();
5、在onPause()中添加
if (mDataDefaultSimObserver != null) {
mDataDefaultSimObserver.unregister();
}
public DataDefaultSimObserver(Handler handler, Context context){6、添加方法DataDefaultSimObserver内部类
private class DataDefaultSimObserver extends ContentObserver{
super(handler);
mResolver = context.getContentResolver();
}
public void register() {
String contentUri;
if (TelephonyManager.getDefault().getSimCount() == 1) {
contentUri = Settings.Global.MOBILE_DATA;
}else {
contentUri = Settings.Global.MOBILE_DATA + SubscriptionManager.getDefaultDataSubId();
}
mResolver.registerContentObserver(Settings.Global.getUriFor(contentUri), false, this);
Log.d("DINO","DataDefaultSimObserver register()");
}
public void unregister() {
mResolver.unregisterContentObserver(this);
}
@Override
public void onChange(boolean selfChange){
Log.d("DINO", "mDataDefaultSimObserver dataEnabld ");
updateCellularDataValues();
}
}
【android L数据连接】如何在Sim Cards的cellular data添加OFF
最新推荐文章于 2022-12-12 11:57:44 发布