Get Last Call Duration in android

后端 未结 9 1567
北荒
北荒 2020-12-03 15:20

I am looking for an easiest way to get call duration of last dialed number. So for e.g if I have made a call to my mom once I cut the call a notification with the duration s

相关标签:
9条回答
  • 2020-12-03 15:50

    You need to use limit clause in your content query to get the last call details. So your content query will become

    Cursor cur = getContentResolver().query( CallLog.Calls.CONTENT_URI,
                 null, null, null, android.provider.CallLog.Calls.DATE + " DESC limit 1;");
    
    0 讨论(0)
  • 2020-12-03 15:52

    Here is code for getting the last call duration.Try it,it works. The last call duration is fetched 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 讨论(0)
  • 2020-12-03 15:55
    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 讨论(0)
  • 2020-12-03 16:00

    This code it work 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 讨论(0)
  • 2020-12-03 16:02

    Get Last call duration and not previous try giving a delay

    private Handler finishedCall = new Handler();    
    finishedCall.postDelayed(new Runnable() {
            @Override
            public void run() {
                String dura = LastCall();
        }, 1000);
    

    And Call the Lastcall function

    public String LastCall() {
                String callDura = "0";
                StringBuffer sb = new StringBuffer();
                Uri contacts = CallLog.Calls.CONTENT_URI;
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALL_LOG) != PackageManager.PERMISSION_GRANTED) {
                    callDura = null;
                }
                else {
                    Cursor managedCursor = getApplicationContext().getContentResolver().query(
                            contacts, null, null, null, android.provider.CallLog.Calls.DATE + " DESC limit 1;");
                    int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER);
                    int duration1 = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
                    int date = managedCursor.getColumnIndex(CallLog.Calls.DATE);
                    if (managedCursor.moveToFirst() == true) {
                        String phNumber = managedCursor.getString(number);
                        callDura = managedCursor.getString(duration1);
                        String callDate = managedCursor.getString(date);
                        String callDayTime = new Date(Long.valueOf(callDate)).toString();
                        String dir = null;
                        Log.e("DUR", "\nPhone Number:--- " + phNumber + " \nCall duration in sec :--- " + callDura + " \nCall Date in sec :--- " + callDayTime);
                    }
                    managedCursor.close();
                }
                return callDura;
         }
    
    0 讨论(0)
  • 2020-12-03 16:03

    Use the following sort order:

    CallLog.Calls.DATE " + " + CallLog.Calls.DURATION + " * 1000 desc "
    
    0 讨论(0)
提交回复
热议问题