Android获取通话记录示例代码

需积分: 30 9 下载量 60 浏览量 更新于2024-09-11 收藏 1KB TXT 举报
"这篇文章主要介绍了如何在Android平台上获取通话记录的详细步骤,通过代码示例展示了如何使用ContentResolver查询CallLog.Calls.CONTENT_URI来获取通话记录的电话号码、联系人姓名、通话类型以及通话时间等关键信息。" 在Android系统中,获取通话记录涉及到对系统数据库的访问,主要是CallLog表。以下是从Android应用中获取通话记录的关键知识点: 1. ContentResolver: Android中的ContentResolver是与ContentProvider进行交互的接口,用于读取和写入存储在ContentProvider中的数据。在这个例子中,我们使用ContentResolver查询CallLog的内容。 ```java ContentResolver cr = getContentResolver(); ``` 2. CallLog.Calls.CONTENT_URI: 这是一个常量,代表了CallLog的URI,用于查询通话记录。ContentResolver使用这个URI来定位通话记录的数据库表。 ```java final Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE, CallLog.Calls.DATE, CallLog.Calls.DURATION}, null, null, CallLog.Calls.DEFAULT_SORT_ORDER); ``` 3. 查询参数: 在query方法中,我们传入了要查询的列(电话号码、缓存的联系人名称、通话类型、日期和通话时长)、筛选条件(null表示不筛选)和排序方式(默认按照时间排序)。 4. Cursor: 查询的结果会返回一个Cursor对象,它像指针一样遍历查询结果。我们可以使用`moveToPosition(0)`将指针移动到第一条记录,然后通过`getString()`和`getInt()`等方法获取数据。 ```java cursor.moveToPosition(0); strNumber = cursor.getString(0); // 电话号码 strName = cursor.getString(1); // 联系人名称 type = cursor.getInt(2); // 通话类型 callTime = cursor.getLong(3); // 通话时间戳 duration = cursor.getLong(4); // 通话时长 ``` 5. 通话类型: 获取到的`type`字段表示通话类型,Android定义了三个常量: - `INCOMING_TYPE` (1): 表示来电 - `OUTGOING_TYPE` (2): 表示拨出电话 - `MISSED_TYPE` (3): 表示未接电话 6. 日期和时间处理: 通话时间戳需要转换为人类可读的日期和时间格式,这里使用了`SimpleDateFormat`类。 ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); date = new Date(Long.parseLong(cursor.getString(3))); time = sdf.format(date); ``` 7. 打印输出: 最后,将获取到的信息打印出来,方便调试和查看。 ```java System.out.println("------" + duration); System.out.println("?????" + strNumber); ``` 通过以上步骤,我们可以获取并处理Android设备上的通话记录信息,包括通话类型、电话号码、联系人姓名以及通话时间。需要注意的是,访问用户数据时需要确保已获得相应的权限,例如在AndroidManifest.xml中添加`READ_CALL_LOG`权限。