Android获取通话记录示例代码
需积分: 30 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`权限。
426 浏览量
490 浏览量
212 浏览量
295 浏览量
2024-12-31 上传
2024-10-31 上传
3819 浏览量
2012-09-22 上传
281 浏览量
ykonhla
- 粉丝: 0
- 资源: 13