在双SIM卡手机中,我使用PHONE_ACCOUNT_ID属性在通话记录中区分SIM卡,如下面的代码所示。(1或2)拨打或接听电话。电话帐户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))
}
}
2条答案
按热度按时间dldeef671#
您可以使用
SubscriptionManager.getActiveSubscriptionInfoList()
获取SIM卡的信息。在某些设备上,
Call.PHONE_ACCOUNT_ID
等于subscriptionInfo.getSubscriptionId()
,但是在其他设备(您的情况)上,subscriptionInfo.getIccId()
是它的子字符串,因此您需要检查两者。另请参见SubscriptionManager参考。
vwoqyblh2#
正式的方法是检查帐户ID(文档此处),但在某些设备上,它只返回SIM卡插槽索引,因此下面是解决方法的代码(来自Android 6.0(Marshmallow)):
用法:
我在这里报告了这个问题(有些设备不遵循官方API):