Ranga Jayasinghe
Ranga Jayasinghe

Reputation: 11

How to retrieve android call log data

I want to retrieve call log and display in a list view. this is done in a second activity (not in main activity). but it's not working. when i use CommonDataKinds.Phone.CONTENT_URI instead of android.provider.CallLog.Calls.CONTENT_URI, i can retrieve contact data. i have set permission please help to resolve. i'm new to Android.

public class CallLogActivity extends 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();
}

Upvotes: 1

Views: 748

Answers (1)

FullPatrickJoin
FullPatrickJoin

Reputation: 184

First of all you define all the fields you want to get. Like follows:

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
        };

Then you define an Order:

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

At last you get the ContentResolver

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

Next step is to write an CursorAdapter class for your list.

Here is a great Tutorial: Link

Btw: The Call Log Content Provider can provide the following fields:

  • CACHED_NAME: the name of the caller
  • CACHED_NUMBER_TYPE: type of number, e.g. mobile, work, home, etc.
  • DATE: date of the call in milliseconds since the "Epoch" (January 1, 1970)
  • DURATION: length of the call in seconds
  • NUMBER: phone number
  • TYPE: type of the call, e.g. incoming, outgoing, etc.

Upvotes: 2

Related Questions