Идентификация слота для сим-карты с PHONE_ACCOUNT_ID в Android CallLogCalls

в мобильных телефонах с двумя SIM-картами мне удается различать симов в журнале вызовов, используя свойство PHONE_ACCOUNT_ID, как показано в приведенном ниже коде. Теперь мне нужно знать, какая сим-карта на самом деле использовалась (1 или 2), чтобы сделать или принять вызов. PHONE_ACCOUNT_ID показывает что-то вроде этого 8953011201104578086F для и одной симки и похожей но не равной другой. Это было проверено на мобильном телефоне Samsung.

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

person Wrath    schedule 10.09.2020    source источник


Ответы (1)


Вы можете получить информацию о SIM-картах с помощью SubscriptionManager.getActiveSubscriptionInfoList().

На некоторых устройствах Call.PHONE_ACCOUNT_ID равно subscriptionInfo.getSubscriptionId(), однако на других устройствах (в вашем случае) subscriptionInfo.getIccId() является его подстрокой, поэтому вам нужно проверить оба.

См. также справку по SubscriptionManager.

person balee    schedule 14.12.2020