当前位置: 首页 > 知识库问答 >
问题:

使用多SIM卡设备的多个电话管理器

欧阳成弘
2023-03-14

我试图确定multisim Android设备(运行Android 7.0)是否有任何工作/启用的sim卡。为此,我遵循Google关于将多个TelephonyManager附加到默认TelephonyManager实例的文档,如下所示:https://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_READY

返回的TelephonyManager将对所有调用使用默认订阅。要为特定订阅调用API,请使用createForSubscriptionId(int)。e、 g.telephonyManager=defaultSubTelephonyManager。createForSubscriptionId(子ID);

在我的具体案例中,类似这样的情况:

 telephonyManager = (TelephonyManager) mContext
                   .getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_SERVICE_STATE);


List subList = mSubManager.getActiveSubscriptionInfoList();
        SubscriptionInfo firstSub = (SubscriptionInfo) subList.get(0);
    mSim0TelephonyManager = telephonyManager.createForSubscriptionId(firstSub.getSubscriptionId());
    mSim0TelephonyManager.listen(new Sim0PhoneStateListener(), PhoneStateListener.LISTEN_SERVICE_STATE);
    int test = mSim0TelephonyManager.getSimState();

SubscriptionInfo secondSub = (SubscriptionInfo) subList.get(1);
 mSim1TelephonyManager = telephonyManager.createForSubscriptionId(secondSub.getSubscriptionId());
mSim1TelephonyManager.listen(new Sim1PhoneStateListener(), PhoneStateListener.LISTEN_SERVICE_STATE);
 int testw = mSim1TelephonyManager.getSimState();

首先,我得到了所有的活动订阅,这已经是一件痛苦的事情,因为事实上,这些订阅并不是活动订阅,就像那些状态为服务的订阅一样,它们只是插入SIM卡插槽中的SIM卡。

这意味着,即使您使用Android设置菜单停用SIM卡,您仍然会收到该SIM卡作为一个活跃的订阅!

下一个问题是,即使在停用(没有服务!!!)SIM卡我得到一个值5(https://developer.android.com/reference/android/telephony/TelephonyManager.html#SIM_STATE_READY)。对我来说,这是不可理解的,当整个SIM卡被停用时,SIM卡状态已经准备好了。这意味着那些API调用根本不可靠...

此外,在将PhoneStateListeners添加到单独的新电话管理器之后,当SIM卡通过Android设置菜单激活/停用时,我不会对这些PhoneStateListeners的实现进行任何调用...

现在我想知道Android内部是否有问题,或者设备制造商的实施是否有问题(在三星A5 2017 Duo和华为P9 Lite上进行测试)。不幸的是,仿真器不支持多sim卡,因此我无法在以下情况下测试普通Android Nougat版本:(

更新:

与此同时,我发现了这个主题:如何在使用双SIM卡功能时获得PhoneStateListener

Google在listen(PhoneStateListener,int events)中的实现似乎实际上存在一个bug,导致PhoneStateListener仅为默认SubscriptionId实例化,而与构造函数中传递的参数无关。。。。

共有1个答案

子车睿
2023-03-14

我没试过但可能对你有用

subids[] = SubscriptionManager.getSubscriptionId()
if (SubscriptionManager.isActiveSubscriptionId(subids[0])){
    mSim0TelephonyManager = telephonyManager.createForSubscriptionId(firstSub.getSubscriptionId());
}

这会管用的

 类似资料:
  • 对于API 22,我尝试使用SubscriptionManager来读取双SIM IMSI。 IMSI为14至15个字符,格式如下:“MCC-MNC-MSIN”MCC=移动国家代码(例如,美国为310);MNC=移动网络代码(例如,AT为410 类中没有获取IMSI的方法。两种方法都有 所以我的问题是,如何使用SubscriptionManager获得完整的IMSI? 更新:Subscriptio

  • 提供访问通用工具或硬件设备的接口,例如 环形缓冲区、管道等通用工具,GPIO、SPI、I2C等硬件设备 模块   设备子系统   I/O设备子系统     环形缓冲区   环形缓冲区接口     环形块状缓冲区   环形块状缓冲区接口     完成信号量   完成信号量接口     管道   管道接口     数据队列   数据队列接口     工作队列   工作队列接口     等待队列   等

  • 可以在设备管理中添加您常使用或受信任的设备,方便对设备进行统一的管理,同时支持设备的远程管理。 3.4.1.1. 添加设备 第一步:获得目标设备的标识,可以在目标设备的"设置->诊断信息->设备标识”中查看并复制; 第二步:添加设备,在设备管理界面点击“添加”按钮,输入设备标识并点击“保存”,设备添加成功; [图片丢失] 选项设置 在设备列表中,选中要管理的设备,点击“选项设置”按钮即可进入设备配

  • 我有未启用SNMP的设备。我有API来获取其状态,并正在为其实现SNMP代理。我使用SNMP4j做到了这一点,并且可以回答GET请求并发送陷阱。 我的问题是,有几个(2)这样的设备来监控我的程序的同一个实例。到目前为止,我为MIB中的每个设备添加了一个分支,如和,但1-这很丑陋,2-我不能为每个设备提供一个MIB,但为整个系统提供一个MIB,其中包含冗余信息,这也很丑陋;) 我不确定MIB对象是否

  • 问题内容: 我想知道是否可以通过Spring Security验证用户会话,从而仅打开一个浏览器选项卡。可能吗? 我还想知道是否可以执行以下操作:当用户关闭该选项卡并在会话结束之前从直接应用程序中再次打开它之前,将其打开,而无需转到登录屏幕。 我正在使用JSF 1.2,RichFaces 3.3.3,Hibernate和Co … 详细信息:我知道弹簧安全性,我正在研究它。 现在,谢谢我的英语不好。

  • 主要内容:本节引言:,1.获得TelephonyManager的服务对象,2.用法示例,3.本节示例代码下载,本节小结:本节引言: 本章节是Android基础入门教程的最后一章,主要讲解是一些零零散散的一些知识点,以及一些遗漏 知识点的补充,这些零散的知识点包括,各种系统服务的使用,比如本节的电话管理器,短信管理器, 振动器,闹钟,壁纸等等,还有传感器之类的东西!乱七八糟什么都有哈!好的,本节我们要学习的 是TelephonyManager,见名知义:用于管理手机通话状态,获取电话信息(设备信息