【问题标题】:Android - How to detect if user rejected an incoming call?Android - 如何检测用户是否拒绝来电?
【发布时间】:2017-04-30 03:09:48
【问题描述】:

我正在制作一个带有来电的 Android 应用。 我的应用程序中有什么方法可以知道用户在接听之前是否拒绝了任何来电?

【问题讨论】:

标签: android broadcastreceiver telephonymanager incoming-call


【解决方案1】:

首先,您必须在清单文件中添加一个权限。

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

然后你必须在清单文件中注册一个广播接收器。

<receiver android:name=".YourReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>

然后写入你的广播接收器的 onReceive 方法:

public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 
    if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
        //If the phone is **Ringing**
    }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){
        //If the call is **Received**
    }else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
        //If the call is **Dropped** or **Rejected**
    }
}

如果状态从TelephonyManager.EXTRA_STATE_RINGING 变为TelephonyManager.EXTRA_STATE_IDLE,则为未接来电。

像这样你必须检查条件。

请在这些条件下输入日志。然后查看日志。我想你会得到答案的。

【讨论】:

  • 我已经试过了。但我想知道有什么方法可以区分通话掉线和通话被拒绝?
  • @EvilGuy 你必须检查手机的状况。我正在更新答案。请检查一下。
  • 如果您没有收到我之前的评论,我很抱歉。我想在接听之前检测它是未接来电还是用户拒绝了来电。因为在这两种情况下,都会打印最后一个“if-else”的登录。
【解决方案2】:

您已经有一段时间没有问过了,但我认为这可能对其他人将来的参考有用。

如果您从 Android 的调用日志中提取数据(例如提取到 XML 或在您的情况下提取到应用中的变量),您有两个感兴趣的字段:

1) numbertype 例如,1 表示传入,2 表示传出,3 表示未接

2) 持续时间(以秒为单位)

被拒绝的号码(正如您正确提到的)被视为 numbertype=1。但是,如果您将 numbertype=1 和 duration=0 结合起来(因为任何接听的电话都将持续时间>0),那么这有望解决您的问题。

我使用的是 Android 6,不确定从那时起类型是否发生了变化,但对我来说,上述方法在 99.9% 的情况下都有效。从来没有在不到一秒钟的时间内挂断电话:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多