Android设置默认的数据卡

来源:互联网 发布:飞鸽传书软件怎么用 编辑:程序博客网 时间:2024/06/16 14:35

在双卡的安卓手机中,如何利用代码设置默认的数据流量卡呢,可以利用android原生API提供的一个方法,即SubscriptionManager.setDefaultDataSubId(int subId).源码如下:

/** @hide */
    public void setDefaultDataSubId(int subId) {
        if (VDBG) logd("setDataSubscription sub id = " + subId);
        try {
            ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
            if (iSub != null) {
                iSub.setDefaultDataSubId(subId);
            }
        } catch (RemoteException ex) {
            // ignore it
        }
    }

这个方法有@hide注解,所以用的时候需要利用反射进行调用,调用方法如下:
public void setDefaultDataSub(int slotindex){    SubscriptionManager sm = SubscriptionManager.from(this);    int subId = sm.getActiveSubscriptionInfoForSimSlotIndex(slotindex).getSubscriptionId();    try {        Method method = sm.getClass().getMethod("setDefaultDataSubId",int.class);        if(method != null)        {            method.invoke(sm,subId);        }    } catch (NoSuchMethodException e) {        e.printStackTrace();    } catch (InvocationTargetException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    }}
经本人验证,该方法有效。另外,如果想设置默认的通话卡或者短信卡,也有相关的API,setDefaultSmsSubId(int subId)和setDefaultVoiceSubId(int subId),同时也有相应的get方法来获取默认的数据卡、短信卡、语音卡subId。这些方法只能用于android API level 23及以上,而且在我的联想设备上,apk必须装到system/priv-app下面,set方法才有效,否则会报java.lang.reflect.InvocationTargetException异常,get方法应该不需要是系统应用,也不需要利用反射机制,可以直接调用。
原创粉丝点击