Search code examples
androidandroid-intentbroadcastreceiverphone-call

Track a phone call duration


Is it possible to utilize the users phone through their cell provider, and track the length of a phone call?

So the user presses a button in the app "Call Now". A call begins to a pre-determined number. We record the start time. When the call ends, we calculate how many minutes were used.

Possible?


Solution

  • To calculate time talked for both incoming , outgoing calls use the following broadcast receiver :

    public class CallDurationReceiver extends BroadcastReceiver {
    
        static boolean flag = false;
        static long start_time, end_time;
    
        @Override
        public void onReceive(Context arg0, Intent intent) {
            String action = intent.getAction();
            if (action.equalsIgnoreCase("android.intent.action.PHONE_STATE")) {
                if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_RINGING)) {
                    start_time = System.currentTimeMillis();
                }
                if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_IDLE)) {
                    end_time = System.currentTimeMillis();
                    //Total time talked =
                    long total_time = end_time - start_time;
                    //Store total_time somewhere or pass it to an Activity using intent
                }
            }
        }
    

    Register your receiver in your manifest file like this:

     <receiver android:name=".CallDurationReceiver">
           <intent-filter>
               <action android:name="android.intent.action.PHONE_STATE" />
           </intent-filter>
        </receiver>
    

    Also add the uses permission:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />