可能重复:
It's possible to get outgoing call duration during call?
我需要显示实时拨出电话的持续时间。
但我不知道何时应该启动计时器。
我必须从另一方获得答案时开始。 我试过TelephonyManager.EXTRA_STATE_OFFHOOK - 但它的状态是什么时候 我按下通话按钮..
OFFHOOK是拨打电话的状态。 因此,我们应该在收到电话时收到通知。
我们怎么能这样做? 你能帮助我吗?什么时候我应该开始计算出局时间?
由于
UPD ..
我认为这些数据会产生移动运营商服务器。此服务器在每次拨出呼叫后返回呼叫持续时间和当前余额。 也许这是对的?
我找不到任何解决方案,但每次调用后呼叫持续时间的值都将存储在db中。我们可以通过CallLog.Calls.DURATION获得它 该值如何填充db?
中的字段答案 0 :(得分:4)
使用内容观察者监听呼叫日志内容URI(如果已更改):
ContentResolver contentResolver = context.getContentResolver();
CallLogObserver mObserver = new CallLogObserver(new Handler(), context);
contentResolver.registerContentObserver(
Uri.parse("content://call_log/calls"), true, mObserver);
这是你的CallLogObserver:
public class CallLogObserver extends ContentObserver {
private Context context;
public CallLogObserver(Handler handler, Context context) {
super(handler);
this.context = context;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i(TAG, "CallLogs Onhange()");
try{
Cursor c = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null,
null, null, CallLog.Calls.DATE + " DESC");
if (c != null) {
if (c.moveToFirst()) {
int type = Integer.parseInt(c.getString(c
.getColumnIndex(CallLog.Calls.TYPE)));
/*
* increase call counter for outgoing call only
*/
if (type == 2){
String number = c.getString(c
.getColumnIndex(CallLog.Calls.NUMBER));
long duration = c.getLong(c
.getColumnIndex(CallLog.Calls.DURATION));
Log.i(TAG, "numer = " + number + " type = " + type + " duration = " + duration);
}
}
c.close();
}
else
Log.e(TAG,"Call Logs Cursor is Empty");
}
catch(Exception e){
Log.e(TAG, "Error on onChange : "+ e.toString());
}
}