0

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

4

2 回答 2

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,则为未接来电。

像这样你必须检查条件。

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

于 2017-04-30T05:53:33.877 回答
0

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

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

1) numbertype例如 1 用于传入,2 用于传出,3 用于未接

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

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

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

于 2020-01-08T23:48:49.070 回答