@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; } }
基本能够实现判断是否接通的功能。