首页 > 解决方案 > 在 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))
    }
}

标签: javaandroidkotlincalllog

解决方案


您可以使用 获取有关 SIM 卡的信息SubscriptionManager.getActiveSubscriptionInfoList()

在某些设备上,Call.PHONE_ACCOUNT_IDequals subscriptionInfo.getSubscriptionId(),但是在其他设备(您的情况)subscriptionInfo.getIccId()上是它的子字符串,因此您需要同时检查两者。

另请参阅SubscriptionManager参考。


推荐阅读