【发布时间】:2017-04-30 03:09:48
【问题描述】:
我正在制作一个带有来电的 Android 应用。 我的应用程序中有什么方法可以知道用户在接听之前是否拒绝了任何来电?
【问题讨论】:
标签: android broadcastreceiver telephonymanager incoming-call
我正在制作一个带有来电的 Android 应用。 我的应用程序中有什么方法可以知道用户在接听之前是否拒绝了任何来电?
【问题讨论】:
标签: android broadcastreceiver telephonymanager incoming-call
首先,您必须在清单文件中添加一个权限。
<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,则为未接来电。
像这样你必须检查条件。
请在这些条件下输入日志。然后查看日志。我想你会得到答案的。
【讨论】:
您已经有一段时间没有问过了,但我认为这可能对其他人将来的参考有用。
如果您从 Android 的调用日志中提取数据(例如提取到 XML 或在您的情况下提取到应用中的变量),您有两个感兴趣的字段:
1) numbertype 例如,1 表示传入,2 表示传出,3 表示未接
2) 持续时间(以秒为单位)
被拒绝的号码(正如您正确提到的)被视为 numbertype=1。但是,如果您将 numbertype=1 和 duration=0 结合起来(因为任何接听的电话都将持续时间>0),那么这有望解决您的问题。
我使用的是 Android 6,不确定从那时起类型是否发生了变化,但对我来说,上述方法在 99.9% 的情况下都有效。从来没有在不到一秒钟的时间内挂断电话:)
【讨论】: