【问题标题】:Detect the time when a phone starts ringing for outgoing calls检测电话在拨出电话时开始响铃的时间
【发布时间】:2014-04-27 09:42:56
【问题描述】:

如何检测电话在拨出电话时开始响铃的时间。 我正在开发一个应用程序,在该应用程序中我试图以编程方式进行呼叫,并且当呼叫连接时(响铃)。我想得到一些回应(比如已连接)。我正在尝试下面的代码,它能够拨打电话但不知道如何获得响应。

Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"mobile no.")); 
             startActivity(callIntent);

提前感谢您的时间和考虑。

编辑:当拨出电话连接(振铃状态)时,我想收到通知。像吐司或其他任何相关的东西。可能吗?

【问题讨论】:

  • 您找到跟踪呼叫计时器事件的答案了吗?即使我正在寻找相同的方法,我还没有找到任何解决方案

标签: android phone-call telephony


【解决方案1】:

您必须使用 BroadcastReceiver 来监听 call 事件,然后在它被触发时处理它。这是我在 Google 上找到的一个不错的教程。

http://looksok.wordpress.com/2013/04/13/android-broadcastreceiver-tutorial-detect-outgoing-phone-call-event/

【讨论】:

  • 从我的 Stack Exchange 应用中回答
  • 我想在电话开始响铃以拨出电话时得到响应
  • 接收者还是调用者?
  • 我想要来电回复
【解决方案2】:

常规的非系统应用程序无法检测到 - 没有 Android API。 我找不到办法,我在很长一段时间内都在谷歌上搜索解决方案:-(

没有办法(很遗憾,因为我需要它)来检测拨出电话开始响铃的时间。

【讨论】:

    【解决方案3】:

    我知道已经有一段时间了,但我希望对仍在寻找解决方案的人有所帮助!

    我最近不得不从事一个类似的项目,我需要捕获拨出电话的振铃状态,而我能找到的唯一方法是使用本机拨号应用程序的隐藏 Api。由于 api 更改,这仅适用于 android > 5.0。这在 Android 5.0.1 上进行了测试,效果很好。 (附注:您需要一个有根设备才能使其工作,因为您需要将您的应用程序安装为系统应用程序(谷歌如何!),然后才能检测拨出呼叫状态)。

    作为记录,PhoneStateListener 不适用于检测许多帖子中提到的拨出呼叫状态。

    首先,在清单文件中添加这个权限,

    <uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" />
    

    然后定义你的广播接收器,(这里是一个示例代码!)

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.telephony.TelephonyManager;
    
    public class MyBroadcastReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, final Intent intent)
        {
            switch (intent.getIntExtra("foreground_state", -2)) {
                case 0: //  PreciseCallState.PRECISE_CALL_STATE_IDLE:
                    System.out.println("IDLE");
                    break;
                case 3: //  PreciseCallState.PRECISE_CALL_STATE_DIALING:
                    System.out.println("DIALING");
                    break;
                case 4: //  PreciseCallState.PRECISE_CALL_STATE_ALERTING:
                    System.out.println("ALERTING");
                    break;
                case 1: //  PreciseCallState.PRECISE_CALL_STATE_ACTIVE:
                    System.out.println("ACTIVE");
                    break;
            }
    
        }
    } 
    

    我用它们的值替换了一些常量,因为我在不熟悉反射概念的人中看到了很多困惑(为了方便起见)。 警报基本上是接收器实际响铃时的状态!这不包括呼叫建立时间!所以你可以通过使用来获得那个case语句中的时间,

    System.currentTimeMillis();
    

    或您喜欢的其他格式!

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多