java - 在 android CallLogCalls 中使用 PHONE_ACCOUNT_ID 识别 sim 插槽
问题描述
在双卡手机中,我设法使用 PHONE_ACCOUNT_ID 属性区分通话记录中的 sim 卡,如下面的代码所示。现在我需要知道实际使用的是什么 sim(1 或 2)来拨打或接听电话。PHONE_ACCOUNT_ID 显示类似 8953011201104578086F 的内容,其中一个 sim 和类似但不等于另一个。这是在三星手机上测试的
fun readCallLog() {
val cursor = context.contentResolver.query(CallLog.Calls.CONTENT_URI,null, null, null, CallLog.Calls.DATE + " DESC")
val number = cursor?.getColumnIndex(CallLog.Calls.NUMBER)
val date = cursor?.getColumnIndex(CallLog.Calls.DATE)
val type = cursor?.getColumnIndex(CallLog.Calls.TYPE)
val account_id = cursor?.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID)
val tmp : MutableList<List<String?>> = mutableListOf()
while (cursor?.moveToNext() == true ) {
val call_number = if (number != null) cursor.getString(number) else ""
val call_date = if(date != null) cursor.getString(date) else ""
val call_type = if(type != null) cursor.getInt(type).toString() else ""
val call_account_id = if(account_id != null) cursor.getString(account_id) else ""
tmp.add( listOf(call_number, call_date, call_type, call_account_id))
}
}
解决方案
您可以使用 获取有关 SIM 卡的信息SubscriptionManager.getActiveSubscriptionInfoList()
。
在某些设备上,Call.PHONE_ACCOUNT_ID
equals subscriptionInfo.getSubscriptionId()
,但是在其他设备(您的情况)subscriptionInfo.getIccId()
上是它的子字符串,因此您需要同时检查两者。
另请参阅SubscriptionManager参考。
推荐阅读
- php - 在 Laravel 中单击提交时重复的表单验证错误
- ios - 为什么应用程序在发布模式下显示白屏?
- javascript - 如何在 Django 中使用 JavaScript 获取图表的值?
- svg - SVG d3 中带阴影的箭头标记
- node.js - 无服务器/无状态环境中的 Gatsby 预览服务器
- google-cloud-platform - 按凭据 ID 对 API 端点的指标分组不适用于 JWTtokens
- eclipse - Eclipse Tomcat 文件部署
- python-3.x - 使用 boto3 检查 AWS Lambda 是否正在执行中
- docker - 在 docker run 命令中传递参数
- javascript - 如何设置 SVG 图像的样式以延迟更改颜色