android - 如何检索android通话记录数据

标签 android

我想检索通话记录并在 ListView 中显示。这是在第二个 Activity 中完成的(不是在主要 Activity 中)。但它不工作。当我使用 CommonDataKinds.Phone.CONTENT_URI 而不是 android.provider.CallLog.Calls.CONTENT_URI 时,我可以检索联系人数据。我已经设置权限 请帮忙解决。我是 Android 新手。

公共(public)类 CallLogActivity 扩展 Activity {

private ListView callLogListView;
private ArrayList<String> callLogStringArray = new ArrayList<String>();
private ArrayAdapter<String> callLogAdapter  ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_call_log);

    callLogStringArray.add("fdfdfd");
    callLogListView = (ListView)findViewById(R.id.call_log_list);


    callLogAdapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, callLogStringArray);
    callLogListView.setAdapter(callLogAdapter);
    updateCallLog();
}

private void updateCallLog (){
    Cursor c = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, null, null, null);
    int numberColumn = c.getColumnIndex(android.provider.CallLog.Calls.NUMBER);

    if(c.moveToFirst()){
        do {
            callLogStringArray.add(c.getString(numberColumn));

        } while (c.moveToNext());
    }
    callLogAdapter.notifyDataSetChanged();
}

最佳答案

首先,您定义要获取的所有字段。 如下:

String[] strFields = {
        android.provider.CallLog.Calls.NUMBER, 
        android.provider.CallLog.Calls.TYPE,
        android.provider.CallLog.Calls.CACHED_NAME,
        android.provider.CallLog.Calls.CACHED_NUMBER_TYPE
        };

然后你定义一个订单:

String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 

最后你得到了ContentResolver

Cursor mCallCursor = getContentResolver().query(
        android.provider.CallLog.Calls.CONTENT_URI,
        strFields,
        null,
        null,
        strOrder
        );

下一步是为您的列表编写一个 CursorAdapter 类。

这是一个很棒的教程:Link

顺便说一句: Call Log Content Provider 可以提供以下字段:

  • CACHED_NAME:调用者的名字
  • CACHED_NUMBER_TYPE:号码类型,例如移动、工作、家庭等。
  • DATE:自“纪元”(1970 年 1 月 1 日)以来的调用日期(以毫秒为单位)
  • DURATION:通话时长(以秒为单位)
  • NUMBER:电话号码
  • TYPE:调用类型,例如传入、传出等

关于android - 如何检索android通话记录数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24685468/

相关文章:

android - 最佳表演: XML or Java?

java - 如何从 LinkedHashSet 中获取前 5 个值?

java - 在选项卡布局 fragment 中未显示其布局

java - JCIFS API Java,从内部存储复制文件

java - 带有 libgdx 的 Android 应用程序在一段时间后被推送到后台

android - 检查互联网是否可用(targetSdk : Android Q)

java - 如果循环在关闭对话框后不会执行(第一次使用java)Java/Android

android - 使用自定义 BaseAdapter 刷新 GridView 内容

android - Eclipse 显示窗口不起作用,我无法在那里运行任何内容

android - 编译错误 : "Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 74303 into a non-jumbo instruction"