相关 api

getCallCapablePhoneAccounts
Added in API level 23

Android 5.0 之前的版本

Call from second sim

获取 sim 卡数量

  1. public static boolean isMultiSim(Context context){
  2. boolean result = false;
  3. TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
  4. if(telecomManager != null){
  5. List<PhoneAccountHandle> phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();
  6. result = phoneAccountHandleList.size() >= 2;
  7. }
  8. return result;
  9. }

用指定 sim 卡拨号

  1. public static void call(Context context, int id, String telNum){
  2. TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
  3. if(telecomManager != null){
  4. List<PhoneAccountHandle> phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();
  5. Intent intent = new Intent();
  6. intent.setAction(Intent.ACTION_CALL);
  7. intent.setData(Uri.parse("tel:" + telNum));
  8. intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandleList.get(id));
  9. context.startActivity(intent);
  10. }
  11. }

获取卡的颜色

  1. public static int getSimColor(Context context, int id){
  2. int highlightColor = 0;
  3. TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
  4. if(telecomManager != null) {
  5. List<PhoneAccountHandle> phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();
  6. PhoneAccount phoneAccount = telecomManager.getPhoneAccount(phoneAccountHandleList.get(id));
  7. if (phoneAccount != null) {
  8. highlightColor = phoneAccount.getHighlightColor();
  9. }
  10. }
  11. return highlightColor;
  12. }

获取最近一次通话使用的 sim 卡

  1. public static String getLastestSim(Context context, String telNum){
  2. String result = "SIM1";
  3. Cursor cursor = null;
  4. try {
  5. cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls.NUMBER, CallLog.Calls.PHONE_ACCOUNT_ID},
  6. CallLog.Calls.NUMBER + " = ?", new String[]{telNum}, CallLog.Calls.DEFAULT_SORT_ORDER);
  7. if (cursor != null && cursor.moveToFirst()) {
  8. int subId = cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID));
  9. Logger.d(TAG, "getLastestSim subId:" + subId);
  10. int slotId = getSlotIdUsingSubId(subId, context);
  11. Logger.d(TAG, "getLastestSim slotId:" + slotId);
  12. if(1 == slotId){
  13. result = "SIM2";
  14. }
  15. }
  16. }catch (Exception e){
  17. e.printStackTrace();
  18. }finally {
  19. if(cursor != null){
  20. cursor.close();
  21. }
  22. }
  23. Logger.d(TAG, "getLastestSim result:" + result);
  24. return result;
  25. }

用 SubscriptionId 获取 slot_id

  1. public static int getSlotIdUsingSubId(int subId,Context context) throws InvocationTargetException {
  2. int result = 0;
  3. try {
  4. Class<?> clz = Class.forName(SUBSCRIPTION_MANAGER);
  5. Object subSm;
  6. Constructor<?> constructor = clz.getDeclaredConstructor(Context.class);
  7. subSm = constructor.newInstance(context);
  8. Method mth = clz.getMethod("getSlotId", int.class);
  9. result = (int)mth.invoke(subSm, subId);
  10. } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
  11. | IllegalArgumentException | NoSuchMethodException | InvocationTargetException e) {
  12. e.printStackTrace();
  13. }
  14. return result;
  15. }

Android 6.0 双卡拨号的更多相关文章

  1. Android 5.0 双卡信息管理分析

    首先,如前面的博文所讲的,Android5.0开始支持双卡了.另外,对于双卡的卡信息的管理,也有了实现,尽管还不是完全彻底完整,如卡的slot id, display name,iccid,color ...

  2. Android 6.0 运行时权限处理完全解析

    一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...

  3. Google Android 6.0 权限完全解析

    注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...

  4. Android 6.0 新功能及主要 API 变更

    运行时权限 这个版本中引入了新的权限模型,现在用户可以在运行时直接管理应用程序的权限.这个模型基于用户对权限控制的更多可见性,同时为应用程序的开发者提供更流畅的应用安装和自动升级.用户可以为已安装的每 ...

  5. Android 4.0源码目录结构

    转:http://blog.csdn.net/xiangjai/article/details/9012387 在学习Android的过程中,学习写应用还好,一开始不用管太多代码,直接调用函数就可以了 ...

  6. Android 6.0 Changes

    原文链接:http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html 伴随着新特性和功能,Andr ...

  7. Android 4.0 ICS SystemUI浅析——StatusBar结构分析

    Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...

  8. Android 7.0(牛轧糖)新特性

    Android 7.0(牛轧糖)新特性 谷歌正式在I/O大会现场详细介绍了有关Android 7.0的大量信息.目前,我们已经知道,新一代Android操作系统将支持无缝升级,能够通过Vulkan A ...

  9. 还在期待安卓9.0吗?Android 10.0要来了

    目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...

随机推荐

  1. 简单学C——第三天

    控制结构(二)     前面我们已经了解到了,控制结构中的判断结构,当然switch语句也是判断语句.不过如果if...else...语句你会了,我相信switch语句你也一定会的,它们的功能都是差不 ...

  2. Java实现http服务器(一)

    基于Java实现Http服务器有多种多样的方法 一种轻量级的方式是使用JDK内置的com.sun.net.httpserver包下和sun.net.httpserver包下类提供的方法构建,该方法轻便 ...

  3. BZOJ4033 T1

    Description 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0-N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色,并将其他的\(N-K\)个点染成白色.将 ...

  4. [BZOJ 3052] [wc2013] 糖果公园 【树上莫队】

    题目链接:BZOJ - 3052 题目分析 这道题就是非常经典的树上莫队了,并且是带修改的莫队. 带修改的莫队:将询问按照 左端点所在的块编号为第一关键字,右端点所在的块为第二关键字,位于第几次修改之 ...

  5. Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别

    首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库 ...

  6. 【CF】270D Design Tutorial: Inverse the Problem

    题意异常的简单.就是给定一个邻接矩阵,让你判定是否为树.算法1:O(n^3).思路就是找到树边,原理是LCA.判断树边的数目是否为n-1.39-th个数据T了,自己测试2000跑到4s.算法2:O(n ...

  7. 在代码中创建Drawable资源

    如何在代码中创建圆环: 先看效果图 代码; import android.graphics.drawable.GradientDrawable; GradientDrawable circle = n ...

  8. 神器 Sublime Text 3 的一些常用快捷键

    选择类   Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个例子:快速选中并更改所有相同的变量名. ...

  9. FPGA入门学习第一课:二分频器

    分频器还是比较简单的,一般的思路是:每数几个时钟就输出一个时钟.最简单的当数二分频器了,每当时钟上升沿(或下降沿)就把输出翻转一下.这样就刚好实现了二分频器了. 网上也搜到了最简实现”二分频最简单了, ...

  10. spring中解析xml

    解析xml有SAX,Stax,dom等方式,那么spring中是如何解析xml文件的呢? Document doc = this.documentLoader.loadDocument( inputS ...