java - 在 Android CallLogCalls 中使用 PHONE_ACCOUNT_ID 识别 SIM 卡插槽

标签 java android kotlin calllog

在双 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))
    }
}

最佳答案

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

在某些设备上,Call.PHONE_ACCOUNT_ID 等于 subscriptionInfo.getSubscriptionId(),但是在其他设备上(您的情况)subscriptionInfo.getIccId() 是它的子串,所以你需要检查两者。

另见 SubscriptionManager引用。

关于java - 在 Android CallLogCalls 中使用 PHONE_ACCOUNT_ID 识别 SIM 卡插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63834168/

相关文章:

android - 带有 CustomListAdapter 和 Volley 的 Fragment ViewPager?

java - Kotlin + Spring AliasFor

Android Studio (Kotlin) 如何将 StringArray 转换为 MutableList

java - 解析的 XML 中缺少标记名称(根元素除外)

Java服务器、客户端程序

java - 具有小输入集的 java 中的堆栈溢出错误

Android 性能 : Flat file vs SQLite

android - 使用不同的发布构建算法在 Play 控制台上上传应用程序

android - Kotlin setTargetFragment

java - 包文件不存在