如何检索android调用日志数据

时间:2014-07-10 20:14:45

标签: android

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

公共类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();
}

1 个答案:

答案 0 :(得分:2)

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

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

顺便说一下: 呼叫日志内容提供商可以提供以下字段:

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