본문 바로가기
Programming/Android Java

안드로이드 발신, 수신 통화 모니터링하기

by 개Foot/Dog발?! 2014. 12. 7.

URL : http://yoonhg84.tistory.com/97


.....

전화 상태로 발신을 구분을 할수 있습니다.


발신 : IDLE -> OFFHOOK -> IDLE

수신 : IDLE -> RINGING -> OFFHOOK -> IDLE


.....


PhoneStateReceiver.java

public class PhoneStateReceiver extends BroadcastReceiver {

    private static int pState = TelephonyManager.CALL_STATE_IDLE;

    private static CallLog cLog;

     

    public void onReceive(Context context, final Intent intent) {

        TelephonyManager telManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

 

        telManager.listen(new PhoneStateListener(){

            public void onCallStateChanged(int state, String incomingNumber){

                if(state != pState){

                    if(state == TelephonyManager.CALL_STATE_IDLE){

                        Log.i("Phone","IDLE");

                        if(cLog != null){

                            cLog.setEndDate(System.currentTimeMillis());

                            Log.i("Phone",cLog.toString());

                            cLog = null;

                        }

                    }

                    else if(state == TelephonyManager.CALL_STATE_RINGING){

                        Log.i("Phone","RINGING");

                        cLog = new CallLog(incomingNumber, LogKind.KIND_RECEIVE);

                        cLog.setRingingDate(System.currentTimeMillis());

                    }

                    else if(state == TelephonyManager.CALL_STATE_OFFHOOK){

                        Log.i("Phone","OFFHOOK");

                        cLog.setStartDate(System.currentTimeMillis());

                    }

                     

                    pState = state;

                }

            }

        }, PhoneStateListener.LISTEN_CALL_STATE);

         

        if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){

            Log.i("Phone","out");

            cLog = new CallLog(intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER), LogKind.KIND_SEND);

            cLog.setRingingDate(System.currentTimeMillis());

        }

    }

}


.....