需求
通过AI语音进行切换默认流量卡(切换默认sim卡)
问题
原以为就是个普通需求,既然设置里面都可以手动切换,只要找到对应的系统API接口不就可以了。但经过一通百度和翻阅官网那看不懂的文档最终确认,这TMD既然不是公开的接口。
解决方案
但好在前面那一堆看不懂的文档没白看,起码确认从系统层是可以实现该需求,最终动用我等同于没有的关系好不容易说服驱动工程师帮我重新编译系统。其实也不难,主要是该死的权力,哦不,是权限。
通过设置里切换sim卡的弹框最终确认到以下代码入口:
@Override
public void onClick(DialogInterface dialog, int selectionIndex) {
if (selectionIndex >= 0 && selectionIndex < mSubscriptions.size()) {
int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
final SubscriptionInfo subscription = mSubscriptions.get(selectionIndex);
if (subscription != null) {
subId = subscription.getSubscriptionId();
}
final SimDialogActivity activity = (SimDialogActivity) getActivity();
activity.onSubscriptionSelected(getDialogType(), subId);
}
}
继续跟进去,会发现这该死的就是一行代码的事情setDefaultDataSubId(subId);
private void setDefaultDataSubId(final int subId) {
final SubscriptionManager subscriptionManager = getSystemService(SubscriptionManager.class);
final TelephonyManager telephonyManager = getSystemService(
TelephonyManager.class).createForSubscriptionId(subId);
subscriptionManager.setDefaultDataSubId(subId);
telephonyManager.setDataEnabled(true);
Toast.makeText(this, R.string.data_switch_started, Toast.LENGTH_LONG).show();
}
这就好解决了,既然官方默认不公开自己想办法给公开出去就好了,我这里是直接自定义个系统广播,然后应用层直接发送广播进行控制,代码这里就不贴了,留给大佬们来指教。