电话接通与未接通,下层上报的状态

原创 2012年03月29日 21:20:58

  

 在

反复拨打电话,电话测试小程序,紧急电话与普通电话分枝判断

中遇到这样一个问题 ,在压力测试电话拨打时,如果没有接通,该如何判断此状态呢,该如何统计拨打成功多少次?

从log日志中发现有:

 01-01 08:26:43.507: DEBUG/InCallScreen(1409):   - mLastDisconnectCause = NORMAL
 01-01 08:27:01.515: DEBUG/InCallScreen(1409):   - mLastDisconnectCause = LOCAL

01-02 17:21:36.304: DEBUG/InCallScreen(1383):   - mLastDisconnectCause = ERROR_UNSPECIFIED

 

其中:    // DisconnectCause values in the most common scenarios:
                // - INCOMING_MISSED: incoming ringing call times out, or the  other end hangs up while still ringing
                // - INCOMING_REJECTED: user rejects the call while ringing
                // - LOCAL: user hung up while a call was active (after answering an incoming call, or after making an  outgoing call)
                // - NORMAL: the other end hung up (after answering an incoming   call, or after making an outgoing call)

如果:mLastDisconnectCause = ERROR_UNSPECIFIED 表示连接不成功--失败。

在代码:InCallScreen.java里得到体现,见如下代码:

  

    private void delayedCleanupAfterDisconnect() {
        if (VDBG) log("delayedCleanupAfterDisconnect()...  Phone state = " + mCM.getState());

        // Clean up any connections in the DISCONNECTED state.
        //
        // [Background: Even after a connection gets disconnected, its
        // Connection object still stays around, in the special
        // DISCONNECTED state.  This is necessary because we we need the
        // caller-id information from that Connection to properly draw the
        // "Call ended" state of the CallCard.
        //   But at this point we truly don't need that connection any
        // more, so tell the Phone that it's now OK to to clean up any
        // connections still in that state.]
        mCM.clearDisconnected();

        if (!phoneIsInUse()) {
            // Phone is idle!  We should exit this screen now.
            if (DBG) log("- delayedCleanupAfterDisconnect: phone is idle...");

            // And (finally!) exit from the in-call screen
            // (but not if we're already in the process of pausing...)
            if (mIsForegroundActivity) {
                if (DBG) log("- delayedCleanupAfterDisconnect: finishing InCallScreen...");

                // In some cases we finish the call by taking the user to the
                // Call Log.  Otherwise, we simply call endInCallScreenSession,
                // which will take us back to wherever we came from.
                //
                // UI note: In eclair and earlier, we went to the Call Log
                // after outgoing calls initiated on the device, but never for
                // incoming calls.  Now we do it for incoming calls too, as
                // long as the call was answered by the user.  (We always go
                // back where you came from after a rejected or missed incoming
                // call.)
                //
                // And in any case, *never* go to the call log if we're in
                // emergency mode (i.e. if the screen is locked and a lock
                // pattern or PIN/password is set.)

                if (VDBG) log("- Post-call behavior:");
                if (VDBG) log("  - mLastDisconnectCause = " + mLastDisconnectCause);
                if (VDBG) log("  - isPhoneStateRestricted() = " + isPhoneStateRestricted());
                
                mNumberAll ++;
                Log.e("mNumber", "mNumberAll==="+mNumberAll);
                
                if(mLastDisconnectCause.toString().equals("ERROR_UNSPECIFIED")){
                	mNumberFail ++;
                	Log.e("mNumber", "Failure number==="+mNumberFail);
                }
                
                Log.e("mNumber", "mNumberFail/mNumberAll==="+mNumberAll +"/"+ mNumberAll);
                

                // DisconnectCause values in the most common scenarios:
                // - INCOMING_MISSED: incoming ringing call times out, or the
                //                    other end hangs up while still ringing
                // - INCOMING_REJECTED: user rejects the call while ringing
                // - LOCAL: user hung up while a call was active (after
                //          answering an incoming call, or after making an
                //          outgoing call)
                // - NORMAL: the other end hung up (after answering an incoming
                //           call, or after making an outgoing call)

				//Mod by kylin 2011.10.21 begin	    //Open by kylin 2012.03.22
                if ((mLastDisconnectCause != Connection.DisconnectCause.INCOMING_MISSED)
                        && (mLastDisconnectCause != Connection.DisconnectCause.INCOMING_REJECTED)
                        && !isPhoneStateRestricted()) {
                    if (VDBG) log("- Show Call Log after disconnect...");
                    final Intent intent = PhoneApp.createCallLogIntent();
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(intent);
                    // Even in this case we still call endInCallScreenSession (below),
                    // to make sure we don't stay in the activity history.
                }
			    endInCallScreenSession();
                finish();
                //Mod by kylin 2011.10.21 begin	
            }
        } else {
            // The phone is still in use.  Stay here in this activity, but
            // we don't need to keep the screen on.
            if (DBG) log("- delayedCleanupAfterDisconnect: staying on the InCallScreen...");
            if (DBG) PhoneUtils.dumpCallState();
        }
    }


 

 

Android电话来电流程源码分析

Android的Phone设计的相当复杂,只有了解了Phone的设计框架才能把握电话的拨号或来电流程,在Android电话拨打流程源码分析中已经分析介绍了电话拨打流程,这里介绍一下电话的来电流程。 要...
  • yangwen123
  • yangwen123
  • 2013年08月21日 10:50
  • 6364

分析通话记录信息是通过什么写入的 android 源码 保存通话记录

当来电或去电时,通过记录里的信息是怎么保存下来的呢?       在CallNotifier.java代码里有这样一个方法:       private void onDisconne...
  • wangqilin8888
  • wangqilin8888
  • 2012年03月29日 17:15
  • 5021

android关于监听电话拨打后,对方接听的状态(COLP被连接线识别提示)

最近有一个任务,需要在自己做一个InCallUI,其中有一个需求就是,拨打电话之后,能够监听到别人接听时候的状态 一开始是在PhoneStateListener里面找,发现并没有先关的变量 后...
  • u012904691
  • u012904691
  • 2016年04月07日 11:05
  • 1504

Android 监听电话去电接通瞬间[非来电]

首先感叹一下Android强大,它可以把同一个apk里面得不同Actvity分别运行在不同的进程中,比如我想让自己的应用中Activity运行在Phone进程中,那么我需要做三个事情。 本文包含三个...
  • jwq2011
  • jwq2011
  • 2017年04月01日 16:57
  • 603

Android 监听去电接通状态,注意不是来电

又是一年回家时,订票难呀,难于上青天。 闲来无事,想写一个电话订票的软件,电话不通断线后自动重拔,在网上找了一些资源,发现对于来电状态还好,去电状态资源很少,无奈去看下Phone源码,总算找到一个方...
  • androidchuxueze
  • androidchuxueze
  • 2013年01月17日 18:40
  • 6547

Android 电话状态的监听和回调

知识储备实现手机电话状态的监听,主要依靠两个类:TelephonyManager和PhoneStateListener。TelephonyManager提供手机的基本信息,PhoneStateList...
  • Chuck_0430
  • Chuck_0430
  • 2016年08月24日 22:35
  • 479

android 自动接电话

 android系统提供了电话相关的接口供调用,比如获取电话状态,获取手机服务等,也包括获取电话状态。因此可以根据电话状态的不同做不同操作。 本例主要分析一个来电自动接电话的代...
  • zm_21
  • zm_21
  • 2014年10月30日 10:42
  • 2147

Android通过程序接听或者挂断电话

这篇文章教你如何帮助用户自动接听或者挂断来电。当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手。...
  • l465659833
  • l465659833
  • 2016年09月14日 21:41
  • 1449

Android电话拦截实现以及TelephonyManager监听的取消

由于毕业设计题目涉及到电话拦截这一块。所以鼓捣了一下。遇到了一些问题,总结一下,以免忘记,也希望能帮助其他新人们。 本篇博客目的:实现电话的拦截 会遇到的问题:android studio下AID...
  • wingichoy
  • wingichoy
  • 2015年09月18日 23:00
  • 2595

SIM900B GPRS模块————打电话、发短信、接电话

1、简介 SIM900B是一款新型无线模块,属于B2B类型的四频GSM/GPRS模块,采用非常强大的AMR926EJ-S单芯片处理器,可完全兼容于SIM300/340 。其性能稳定,外观小巧,...
  • huangan_xixi
  • huangan_xixi
  • 2016年03月13日 12:03
  • 972
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:电话接通与未接通,下层上报的状态
举报原因:
原因补充:

(最多只允许输入30个字)