双卡双待(二)

来源:互联网 发布:php特点 编辑:程序博客网 时间:2024/06/10 08:45

前言:

在上一篇的双卡双待(一)中介绍了双卡双待的基础知识,实际项目中不一定会用到,如果你的项目中需要涉及到双卡双待,本篇博文可能会对你有帮助!

1.识别通话记录来自哪一张sim卡

关键代码:

 List<CallInfo> infos = new ArrayList();//获取相关的sim卡信息    public static List<CallInfo> getCallInfos(Context context) throws InvocationTargetException {        Cursor cursor = null;        Uri uri = null;        List<CallInfo> infos = new ArrayList<CallInfo>();        ContentResolver resolver = context.getContentResolver();        boolean s_bSamsung = true;//判断是否为三星        if (Build.VERSION_CODES.M <= Build.VERSION.SDK_INT && s_bSamsung){            uri = Uri.parse("content://logs/call");//三星手机        }else {            uri = CallLog.Calls.CONTENT_URI;        }        try {            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {                ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_CALL_LOG},1);            }else {                cursor = resolver.query(uri, null, null, null, null);                while (cursor.moveToNext()){                    String number = cursor.getString(cursor.getColumnIndex("number"));                    long date = cursor.getLong(cursor.getColumnIndex("date"));                    int type = cursor.getInt(cursor.getColumnIndex("type"));                    //小米手机没有双卡双待识别的功能                    String  slotId = cursor.getString(cursor.getColumnIndex("sim_id"));//适用于三星手机                    //String slotId = cursor.getString(cursor.getColumnIndex("simid"));//魅族手机                    String slotStr;                    if (slotId.equals("0")){                        Log.e("pk","slotId==0");                        slotStr = "卡1";                    }else if(slotId.equals("1")){                        slotStr = "卡2";                    }else {                        slotStr = "未知";                    }                    infos.add(new CallInfo(number, date, type,slotStr));                }                cursor.close();            }        }catch (Exception e){            Log.e("mi",e.getMessage());        }        return infos;    }
2.注意事项:

①在manifest中添加权限
<uses-permission android:name="android.permission.READ_CALL_LOG" />

②获取到的slotStr是从0开始的(0为卡1;1为卡2),所以在显示为哪一张卡的时候,需要+1.

2.可用的设备:

1.支持的设备

目前支持三星设备、魅族设备

2.不支持的设备

目前不支持小米设备

3.支持系统

目前支持5.0及以上的系统

4.逻辑判断

①三星设备

Uri uri = Uri.parse("content://logs/call");cursor = resolver.query(uri, null, null, null, null);while (cursor.moveToNext()){    String  slotId = cursor.getString(cursor.getColumnIndex("sim_id"));//获取卡槽的位置}

②魅族设备

Uri uri = CallLog.Calls.CONTENT_URI;;cursor = resolver.query(uri, null, null, null, null);while (cursor.moveToNext()){    String slotId = cursor.getString(cursor.getColumnIndex("simid"));//获取卡槽的位置}
有新的数据之后再更新
原创粉丝点击