.java
package test.mft; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import android.app.Activity; import android.app.TabActivity; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.CallLog; import android.util.Log; import android.widget.TabHost; public class TestActivity extends Activity { /** Called when the activity is first created. */ ArrayList<String> outgoingList = new ArrayList<String>(); ArrayList<String> incomingList = new ArrayList<String>(); ArrayList<String> missedcallList = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); readCallLogs(); } private void readCallLogs() { missedcallList.clear(); incomingList.clear(); outgoingList.clear(); /*Query Call Log Content Provider*/ Cursor callLogCursor = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, null, null, null, android.provider.CallLog.Calls.DEFAULT_SORT_ORDER); /*Check if cursor is not null*/ if (callLogCursor != null) { /*Loop through the cursor*/ while (callLogCursor.moveToNext()) { /*Get ID of call*/ String id = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls._ID)); /*Get Contact Name*/ String name = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.CACHED_NAME)); /*Get Contact Cache Number*/ String cacheNumber = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.CACHED_NUMBER_LABEL)); /*Get Contact Number*/ String number = callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.NUMBER)); /*Get Date and time information*/ long dateTimeMillis = callLogCursor.getLong(callLogCursor.getColumnIndex(CallLog.Calls.DATE)); long durationMillis = callLogCursor.getLong(callLogCursor.getColumnIndex(CallLog.Calls.DURATION)); /*Get Call Type*/ int callType = callLogCursor.getInt(callLogCursor.getColumnIndex(CallLog.Calls.TYPE)); String duration = durationMillis+""; //通话时间长度(秒) //时间戳转换 SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); String dateString = format.format(dateTimeMillis);// dateTimeMillis = 1365514019004; 通话时间(什么时候通话的) if (cacheNumber == null) cacheNumber = number; if (name == null) name = "No Name"; /*Create Model Object*/ //CallLogModel callLogModel = new CallLogModel(name, cacheNumber, duration, dateString); String callLogString = "{name='"+name+"',cacheNumber='"+cacheNumber+"',duration='"+duration+"',dateString='"+dateString+"'}"; /*Add it into respective ArrayList*/ if (callType == CallLog.Calls.OUTGOING_TYPE) { outgoingList.add(callLogString); } else if (callType == CallLog.Calls.INCOMING_TYPE) { incomingList.add(callLogString); } else if (callType == CallLog.Calls.MISSED_TYPE) { missedcallList.add(callLogString); } } /*Close the cursor*/ callLogCursor.close(); } Log.d("log1", "outgoingList:"+outgoingList); Log.d("log1", "incomingList:"+incomingList); Log.d("log1", "missedcallList:"+missedcallList); } }
加权限
<uses-permission android:name="android.permission.READ_CONTACTS" > </uses-permission>
<uses-permission android:name="android.permission.READ_CALL_LOG"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"></uses-permission>