android - 如何实时获取拨出电话时长?

标签 android

<分区>

Possible Duplicate:
It's possible to get outgoing call duration during call?

我需要显示实时呼出通话时长。

但我不知道什么时候开始计时。

我必须在得到对方的答复后才开始。 我试过 TelephonyManager.EXTRA_STATE_OFFHOOK - 但它的状态是什么时候 我按下通话按钮..

OFFHOOK 是调用电话时的状态。 所以我们应该在接到电话时得到通知。

我们怎样才能得到它? 你能帮助我吗?我应该什么时候开始计算外出时间?

谢谢

更新..

我认为这个数据产生于移动运营商服务器。并且此服务器在每次拨出电话后返回通话时长和当前余额。 也许是对的?

我找不到任何解决方案,但在每次通话后,通话时长的值将存储在 db 中。我们可以通过 CallLog.Calls.DURATION 获取 这个值如何填充数据库中的字段?

最佳答案

使用内容观察者监听调用日志内容 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());
        }

    }

关于android - 如何实时获取拨出电话时长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461750/

相关文章:

java - 在Android Studio中运行应用程序时执行失败

android - 我怎样才能在android中创建像iphone设置这样的 View ?

Android:像素密度是如何计算的?

android - 添加阴影以滑出导航

android - ProgressDialog 仅在 setContentView() 之后触发

android - Gradle 无法同步

android - 使用谷歌播放服务获取坐标与不使用谷歌播放服务

Android 将光标从一个 EditText 移动到另一个?

android - 如何将 repo 注入(inject) FirebaseMessagingService 类

android - 禁用编辑/文本输入并从 EditText 的剪贴板粘贴