双卡双待(二)
来源:互联网 发布: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"));//获取卡槽的位置}
有新的数据之后再更新
阅读全文
2 0
- 双卡双待(二)
- (二)
- (二):基二FFT
- 凤凰涅磐(二十-二十五)
- 凤凰涅磐(二十六-二十七)
- 软件中的八二原则(二)
- 二 迭代器(二)相关辅助函数
- 二.Java编程基础(二)
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- 黑客编程入门(二。二)
- (二十)java小练习二
- (二十六)svn的问题二
- java提高篇(二二)-----LinkedList
- java提高篇(二二)-----LinkedList
- JAVA二学(二)剖析String
- 二、runtime之类和对象(二)
- 二、tftp实现与说明(二)
- 数据库授权
- 操作系统:概念
- 《Deep Learning》学习5——循环神经网络梯度计算
- Java NIO使用及原理分析 (三)
- Java 安装
- 双卡双待(二)
- 2018网易笔试题-操作序列
- Windows10安装Anaconda无法生成菜单
- 深入理解Java中的final关键字
- 设置scrollTop无效
- 机器学习模型和算法学习随记
- POJ
- js经典小案例之倒计时
- 深海探险 51Nod