美文网首页
android 统计拨打电话的时间

android 统计拨打电话的时间

作者: 勤劳的蚂蚁 | 来源:发表于2019-03-28 21:23 被阅读0次

    思路: 之前需求 是统计拨打电话离开页面和再次进入页面的时间差,开始考虑采用生命周期 onResume 和拨打电话 进行及时,可是测试 中结果发现 android 的权限弹框 和 拨打电话在不同的手机上 会提前多次调用系统 的 onResume 方法,最终考虑采用监听 系统的拨打电话的监听,监听 收到电话的状态和挂断的状态。

        private boolean isCall;
        private long firstCallTime;
        private long callTime;
    
      private TelephonyManager tm;
      private MyPhoneListener myPhoneListener;
      /*拨打电话的方法*/
      private void  callMobile(String phone){
            tm = (TelephonyManager) getActivity().getSystemService(TELEPHONY_SERVICE);
            myPhoneListener = new MyPhoneListener();
            tm.listen(myPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
    
            Intent intent = new Intent();//Intent.ACTION_CALL,Uri.parse(listphone.get(position))
            intent.setAction(Intent.ACTION_CALL);//直接拨出电话
    //                    intent.setAction(Intent.ACTION_DIAL);//只调用拨号界面,不拨出电话
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse("tel:" + phone));
    //                    intent.setData(Uri.parse("tel:" + 10086));
            startActivity(intent);
    //        isCall = true;
    //        firstCallTime = System.currentTimeMillis();
        }
    
    
      class MyPhoneListener extends PhoneStateListener {
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                super.onCallStateChanged(state, incomingNumber);
                switch (state) {
                    case TelephonyManager.CALL_STATE_IDLE://空闲
                     
                        if (isCall) {
                            callTime = System.currentTimeMillis() - firstCallTime;
                            isCall = false;
                            costTime = (int) (callTime / 1000);
                            mPresenter.mark(id, costTime + "", "mobile", "", token);
                            if (tm != null&&myPhoneListener!=null) {
                                tm.listen(myPhoneListener, PhoneStateListener.LISTEN_NONE);
                            }
                  
                        }
    
    
                        break;
                    case TelephonyManager.CALL_STATE_RINGING://响铃
                      
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
                        isCall = true;
                        firstCallTime = System.currentTimeMillis();
                    
                        break;
                    default:
                        break;
                }
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            //取消电话监听
            if (tm != null&&myPhoneListener!=null) {
                tm.listen(myPhoneListener, PhoneStateListener.LISTEN_NONE);
            }
        }
    
    

    相关文章

      网友评论

          本文标题:android 统计拨打电话的时间

          本文链接:https://www.haomeiwen.com/subject/aechbqtx.html