Android - 如何检测用户是否拒绝了来电?

时间:2017-04-30 03:09:49

标签: android broadcastreceiver telephonymanager incoming-call

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

2 个答案:

答案 0 :(得分: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>

然后在你的广播接收机上写上接收方法:

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,那么这将是未接来电。

像这样你必须检查条件。

请在这些情况下记录日志。然后查看日志。我想你会得到答案。

答案 1 :(得分:0)

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

如果您从Android的通话记录中提取数据(例如,提取到XML,或者提取到应用程序中的变量),则会有两个感兴趣的字段:

1)数字类型,例如1表示传入,2表示传出,3表示未接

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

(如您正确提到的那样)拒绝的号码被视为numbertype = 1。但是,如果您将numbertype = 1 AND duration = 0组合在一起(因为任何应答的呼叫的duration> 0)都可以解决您的问题。

我使用的是Android 6,不确定此后是否更改了类型,但是对于我来说,上述方法在99.9%的时间内都有效。从未在不到一秒钟的时间内挂断电话:)