如何检索android呼叫日志数据

如何检索android呼叫日志数据,android,Android,我想检索通话记录并显示在列表视图中。这是在第二个活动中完成的(不是在主活动中)。但它不起作用。当我使用CommonDataTypes.Phone.CONTENT_URI而不是android.provider.CallLog.Calls.CONTENT_URI时,我可以检索联系人数据。我已经同意了 请帮忙解决。我不熟悉安卓系统 公共类CallLogActivity扩展了活动{ private ListView callLogListView; private ArrayList<String

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

公共类CallLogActivity扩展了活动{

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();
}
private ListView callLogListView;
私有ArrayList callLogStringArray=新ArrayList();
专用阵列适配器callLogAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u call\u log);
callLogStringArray.add(“fdfdfd”);
callLogListView=(ListView)findViewById(R.id.call\u log\u list);
callLogAdapter=new ArrayAdapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,callLogStringArray);
setAdapter(callLogAdapter);
updateCallLog();
}
私有void updateCallLog(){
游标c=getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,null,null,null);
int numberColumn=c.getColumnIndex(android.provider.CallLog.Calls.NUMBER);
if(c.moveToFirst()){
做{
add(c.getString(numberColumn));
}而(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类

以下是一个很棒的教程:

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

  • CACHED_NAME:调用方的名称
  • 缓存号码类型:号码类型,如手机、工作、家庭等
  • 日期:自“纪元”(1970年1月1日)起的呼叫日期(毫秒)
  • 持续时间:呼叫的长度(秒)
  • 电话号码:电话号码
  • 类型:呼叫的类型,例如传入、传出等