如何实时拨打电话持续时间?

时间:2011-09-18 13:23:38

标签: android

  

可能重复:
  It's possible to get outgoing call duration during call?

我需要显示实时拨出电话的持续时间。

但我不知道何时应该启动计时器。

我必须从另一方获得答案时开始。 我试过TelephonyManager.EXTRA_STATE_OFFHOOK - 但它的状态是什么时候 我按下通话按钮..

OFFHOOK是拨打电话的状态。 因此,我们应该在收到电话时收到通知。

我们怎么能这样做? 你能帮助我吗?什么时候我应该开始计算出局时间?

由于

UPD ..

我认为这些数据会产生移动运营商服务器。此服务器在每次拨出呼叫后返回呼叫持续时间和当前余额。 也许这是对的?

我找不到任何解决方案,但每次调用后呼叫持续时间的值都将存储在db中。我们可以通过CallLog.Calls.DURATION获得它 该值如何填充db?

中的字段

1 个答案:

答案 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());
        }

    }