背景
我正在开发一个应用程序,实现InCallService,以便处理电话通话。
问题
在具有多个SIM卡的设备上,我需要显示使用哪个SIM卡和相关电话号码(当前设备的)的信息。
问题是,我找不到获取此信息的位置。
我的发现
假设我到达诸如onCallAdded这样的函数,我会得到一个Call类的实例,因此我需要将从那里得到的内容与sim卡槽和电话号码相关联。
使用
call.getDetails().getHandle()
,我可以获得仅包含其他人拨打的电话号码的Uri(拨打当前用户的人或当前用户拨打的人)。我可以遍历所有SIM卡,但找不到可用于映射它们与当前呼叫之间的内容:
final TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
for (final SubscriptionInfo subscriptionInfo : subscriptionManager.getActiveSubscriptionInfoList()) {
final TelephonyManager subscriptionId = telephonyManager.createForSubscriptionId(subscriptionInfo.getSubscriptionId());
}
有一段旧代码,它使用了
call.getDetails().getAccountHandle().getId()
和SubscriptionManager.from(context)getActiveSubscriptionInfoList().getActiveSubscriptionInfoList()
,但已经不再起作用。我认为我可以使用
telephonyManager.getSubscriptionId(callDetails.getAccountHandle())
,但需要API 30,这是相当新的...
问题
给定从此回调(和可能其他回调)获得的电话呼叫,如何获取其关联的SIM插槽和电话号码?
我希望尽可能了解在API 23之前的Android版本中如何完成,因为InCallService是从API 23开始的... 在API 30之前应该也是可能的,对吗?
TelecomManager.getPhoneAccount()
运行正常吗? - vlp