Get last call duration in android

I am looking for the easiest way to get the call duration of the last number dialed. So, for example, if I called my mom, as soon as I cut the call, a notification should appear.

I am trying to do the following, but the problem is that it comes with a full duration list. incoming, outgoing, missed.

How to do it:

I tried the following:

private void getCallDetails() { StringBuffer sb = new StringBuffer(); Cursor cur = getContentResolver().query( CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC"); int number = cur.getColumnIndex( CallLog.Calls.NUMBER ); int duration = cur.getColumnIndex( CallLog.Calls.DURATION); sb.append( "Call Details : \n"); while ( cur.moveToNext() ) { String phNumber = cur.getString( number ); String callDuration = cur.getString( duration ); String dir = null; sb.append( "\nPhone Number:--- "+phNumber +" \nCall duration in sec :--- "+callDuration ); sb.append("\n----------------------------------"); } cur.close(); call.setText(sb); } 
+6
source share
8 answers

Try entering the code:

 private void getCallDetails() { StringBuffer sb = new StringBuffer(); Uri contacts = CallLog.Calls.CONTENT_URI; Cursor managedCursor = context.getContentResolver().query(contacts, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); sb.append("Call Details :"); while (managedCursor.moveToNext()) { HashMap rowDataCall = new HashMap<String, String>(); String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); String callDayTime = new Date(Long.valueOf(callDate)).toString(); // long timestamp = convertDateToTimestamp(callDayTime); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); } managedCursor.close(); System.out.println(sb); 

You will receive Call Type in the line below:

 int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
+9
source

To get the latest call data, you need to use the limit clause in your content request. So your request will be

 Cursor cur = getContentResolver().query( CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC limit 1;"); 
+6
source

This is my code and works great for the last outgoing call.

 private String getCallDetails() { StringBuffer sb = new StringBuffer(); Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); managedCursor.moveToLast(); String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } if(dir.equals("OUTGOING")){ //whatever you want here return "yes"; } managedCursor.close(); return "no"; } 
+3
source

This code works fine for me .......

 void retriveCallSummary() { Log.i("*****retriveCallSummary******","Call retrive method worked"); StringBuffer sb = new StringBuffer(); Uri contacts = CallLog.Calls.CONTENT_URI; Cursor managedCursor = mContext.getContentResolver().query( contacts, null, null, null, null); int number = managedCursor.getColumnIndex( CallLog.Calls.NUMBER ); int duration1 = managedCursor.getColumnIndex( CallLog.Calls.DURATION); if( managedCursor.moveToFirst() == true ) { String phNumber = managedCursor.getString( number ); String callDuration = managedCursor.getString( duration1 ); String dir = null; sb.append( "\nPhone Number:--- "+phNumber +" \nCall duration in sec :--- "+callDuration ); sb.append("\n----------------------------------"); Log.i("*****Call Summary******","Call Duration is:-------"+sb); } managedCursor.close(); } 
+2
source

This code works 100%, I used

 public String LastCall() { StringBuffer sb = new StringBuffer(); Cursor cur = getContentResolver().query( CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC"); int number = cur.getColumnIndex( CallLog.Calls.NUMBER ); int duration = cur.getColumnIndex( CallLog.Calls.DURATION); sb.append("Call Details : \n"); while ( cur.moveToNext() ) { String phNumber = cur.getString( number ); String callDuration = cur.getString( duration ); sb.append( "\nPhone Number:"+phNumber); break; } cur.close(); String str=sb.toString(); return str; } 
0
source

Here is the code to get the latest call duration. Try it, it works. The last call duration is selected from the call logs.

  public void getCallLog() { StringBuffer sb = new StringBuffer(); Cursor managedCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); sb.append("Call Details :"); Log.e("total count", "" + managedCursor.getCount()); //managedCursor.moveToPosition(managedCursor.getCount() - 1); int currentCount = 0, lastPosition = 0; while (managedCursor.moveToNext()) { currentCount++; //managedCursor.moveToPosition(managedCursor.getCount() - 1); String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); Date callDayTime = new Date(Long.valueOf(callDate)); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: // lastPosition = currentCount; dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } lastPosition = currentCount; sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); Log.e("test", sb.toString()); } lastPosition--; managedCursor.moveToPosition(lastPosition); int requiredNumber = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int durations = managedCursor.getColumnIndex(CallLog.Calls.DURATION); String phNumber = managedCursor.getString(requiredNumber); String dur = managedCursor.getString(durations); textView.setText(phNumber); textDuration.setText(dur); Log.e("last position number ", phNumber); Log.e("last call Duration ", dur); managedCursor.close(); } 
0
source
 public class Home extends Activity { TextView textView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home_activity); textView = (TextView) findViewById(R.id.textview_call); getCallDetails(); } private void getCallDetails() { Context context; StringBuffer sb = new StringBuffer(); Uri contacts = CallLog.Calls.CONTENT_URI; try { Cursor managedCursor = getContentResolver().query( CallLog.Calls.CONTENT_URI,null, null,null, android.provider.CallLog.Calls.DATE + " DESC limit 1;"); int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); sb.append("Call Details :"); while (managedCursor.moveToNext()) { HashMap rowDataCall = new HashMap<String, String>(); String phNumber = managedCursor.getString(number); String callType = managedCursor.getString(type); String callDate = managedCursor.getString(date); String callDayTime = new Date(Long.valueOf(callDate)).toString(); // long timestamp = convertDateToTimestamp(callDayTime); String callDuration = managedCursor.getString(duration); String dir = null; int dircode = Integer.parseInt(callType); switch (dircode) { case CallLog.Calls.OUTGOING_TYPE: dir = "OUTGOING"; break; case CallLog.Calls.INCOMING_TYPE: dir = "INCOMING"; break; case CallLog.Calls.MISSED_TYPE: dir = "MISSED"; break; } sb.append("\nPhone Number:--- " + phNumber + " \nCall Type:--- " + dir + " \nCall Date:--- " + callDayTime + " \nCall duration in sec :--- " + callDuration); sb.append("\n----------------------------------"); } managedCursor.close(); System.out.println(sb); textView.setText(sb); } catch (SecurityException e) { System.out.println(); // lets the user know there is a problem with the code } } } 
0
source

Use the following sort order:

 CallLog.Calls.DATE " + " + CallLog.Calls.DURATION + " * 1000 desc " 
0
source

Source: https://habr.com/ru/post/956406/


All Articles