首页 > 技术文章 > 如何实现判断对方是否接通

dingchao823 2015-08-02 09:23 原文

@Override
protected void onRestart() {
super.onRestart();  
String strNumber, strName = "";
int type;
long callTime;
Date date;
String time = "";
String duration;
ContentResolver cr = getContentResolver();
final Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI,
new String[] { CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME,
CallLog.Calls.TYPE, CallLog.Calls.DATE,
CallLog.Calls.DURATION }, null, null,
CallLog.Calls.DEFAULT_SORT_ORDER);
cursor.moveToPosition(0);
strNumber = cursor.getString(0); // 呼叫号码
strName = cursor.getString(1); // 联系人姓名
type = cursor.getInt(2); // 来电:1,拨出:2,未接:3 
duration = cursor.getString(4);//
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
date = new Date(Long.parseLong(cursor.getString(3)));
time = sfd.format(date);
if(D) Log.d(TAG,"duration" + duration);
if(D) Log.d(TAG,"strNumber" + strNumber);
}
在手机状态从hookoff转变成IDLE之后,迅速读取通话时间,如果通话时间为0,那就证明没有打通电话!

其实下面的这段代码也可以放到onRestart()中完成。

判断程序:
private class MyPhoneListener extends  PhoneStateListener{

public void onCallStateChanged(int state, String incomingNumber) {
         switch (state) {
         case TelephonyManager.CALL_STATE_RINGING://来电振动
        if(D) Log.d(TAG,"CALL_STATE_RINGING");
             break;
         case TelephonyManager.CALL_STATE_OFFHOOK:// 接通电话     
               //在这里进行接通电话的处理,不过如果是拨打电话的时候,不会有来电振动,会直接到这个状态     
        if(D) Log.d(TAG,"CALL_STATE_OFFHOOK");
        call_flag = true;
             break;
         case TelephonyManager.CALL_STATE_IDLE://挂断电话,也就是电话处于没有拨打的状态
        if(D) Log.d(TAG,"CALL_STATE_IDLE");
        int integers = 0;
        if(duration != null){
        integers = Integer.parseInt(duration);
        }
        if(D) Log.d(TAG,"duration"+integers);
        if( integers > 0 && call_flag == true){//证明接通了
        call_flag = false;
        if(D) Log.d(TAG,"she pick it up");
        }else{
        if(D) Log.d(TAG,"she doesn't pick it up");
        Intent phoneIntent = new Intent("android.intent.action.CALL", 
  Uri.parse("tel:10010")); 
  startActivity(phoneIntent);
        }
             break;
         }
     }

基本能够实现判断是否接通的功能。

推荐阅读