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