我正在執行一個程序以將CallLog發送到服務器,我創建了一個服務,使用以下方法對電話狀態進行輪詢。這個方法被稱爲onCreate。使用服務獲取最後一次CallLog CallLog呼叫日誌
private void pollForCallStatus() {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.d("Poll", Integer.toString(telephonyManager.getCallState()));
switch (telephonyManager.getCallState()){
case TelephonyManager.CALL_STATE_RINGING:
Log.d("CallService", "ringing");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
callStart();
break;
case TelephonyManager.CALL_STATE_IDLE:
callEnd();
break;
}
}
}, 0, 1000);
}
的方法CallEnd,檢查通話開始,如果它的情況下,其獲得CallLog的這個呼叫的持續時間,我用CallLog因爲我可以呼出啓動時不確定性。
private void callEnd() {
if (isStart) {
Log.d("CallService", "callEnd");
Integer duration = getDuration();
Log.d("CallService", duration.toString());
Command sender = new SendCall(this.phoneNumber, duration);
isStart = false;
this.stopSelf();
}
}
我粘貼的方法getDuration,我用它來獲取CallLog呼叫的持續時間。
我的問題是,儘管我recive以前的調用,getDuration沒有得到我最後的通話時間。我試圖等待更多的時間,但我收到了同樣的結果。
---編輯---
我改爲使用ContentObserver的代碼,但我有同樣的結果。我在廣播接收器
public class CallsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
ContentResolver cr = context.getContentResolver();
Cursor callLogCursor = cr.query(android.provider.CallLog.Calls.CONTENT_URI,
null,
null,
null,
android.provider.CallLog.Calls.DEFAULT_SORT_ORDER /*sort by*/);
Command sender = new SendCall(phoneNumber, callLogCursor);
context.getContentResolver().
registerContentObserver(android.provider.CallLog.Calls.CONTENT_URI,
true, new CallObserver(context, sender));
}
}
創建觀察者時CallLog變化執行方法getDuration,新getDuration是
private Integer getDuration(){
Integer duration = 0;
callCursor.moveToFirst();
if (phoneNumber.equalsIgnoreCase(callCursor.getString(callCursor.getColumnIndex(CallLog.Calls.NUMBER))))
duration = callCursor.getInt(callCursor.getColumnIndex(CallLog.Calls.DURATION));
Log.d("SendCall.getDuration", duration.toString());
return duration;
}
和最後一次通話的時長繼續錯了,這時間是先前調用。我不知道我能做到。
ContentObserver通知我當callLog改變時。但是我不知道這個改變是因爲一個呼叫被添加還是被刪除。我需要知道變化的原因是什麼。 –
謝謝,我的問題是我在調用完成之前創建了Cursor。 –