package com.example.materialtest;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.annotation.Nullable;
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
/**
 * Created by jzhou on 2017/12/8.
 */
public class SimCardUtils {
    public static int getSimCardCount(Context context) {
        TelephonyManager mTelephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);//得到电话管理器实例
        Class cls = mTelephonyManager.getClass();    //得到Class
        try {
            Method mMethod = cls.getMethod("getSimCount");//getSimCount方法反射
            mMethod.setAccessible(true);    
            return (int) mMethod.invoke(mTelephonyManager);//反射的方法调用
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return -1;
    }
    public static int getAvailableSimCardCount(Context context){
        int count = 0;
        if(isMultiSim(context)) {
            if (Build.VERSION.SDK_INT >=  Build.VERSION_CODES.LOLLIPOP) { //版本在21及以上
                SubscriptionManager mSubscriptionManager = SubscriptionManager.from(context);
                for (int i = 0; i < getSimCardCount(context); i++) {
                    SubscriptionInfo sir = mSubscriptionManager
                            .getActiveSubscriptionInfoForSimSlotIndex(i);
                    if (sir != null) {
                        count |= 1= 2;
            }
        }
        return result;    //true--多卡,false---单卡
    }
//    这个用于获取sim数量
    public static void call(Context context, int id, String telNum, @Nullable String action){
        TelecomManager telecomManager = null;
        List phoneAccountHandleList = null;
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//版本在21及以上
             telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
            if(telecomManager != null) {
              phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();
            }
        }
            Intent intent = new Intent();
            intent.setAction(action);
            intent.setData(Uri.parse(telNum));
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//版本在23及以上
                if (phoneAccountHandleList != null) {
                    intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandleList.get(id));
                }
            }
            context.startActivity(intent);
    }
}
                可指定电话卡拔打电话
关注
                打赏
            
 
                 
    