电话铃响时,我设法准备了一项活动。现在我需要知道如何取消这个活动,当我接电话或我拒绝电话。我打电话吗 EXTRA_STATE_IDLE
或者 EXTRA_STATE_OFFHOOK
?
有什么想法吗?
显示
<receiver android:name=".IncomingBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
incomingbroadcastreceiver java类
public class IncomingBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
// If an incoming call arrives
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { //Did my work }
5条答案
按热度按时间imzjd6km1#
以下是它在不同场景中所经历的状态:
1) 接听来电
2) 拒绝/不接听(未接)来电
3) 拨号电话
代码
在你的听筒里
xiozqbni2#
vfhzx4xs3#
如果是拨出的电话,上面的回答是完全错误的。在android系统中,没有办法检测电话是否真的有人接听(在拨出电话的情况下)。当你拨一个号码的时候
off_hook
州政府被解雇了。这是android编程的缺点之一。nom7f22z4#
下面是通过辅助功能事件检测传出呼叫的代码-
添加一个扩展
AccessibilityService
在你的项目中-但是为了得到这个函数
event.getSource()
您必须通过xml指定一些服务配置,因此在项目中创建一个xml文件夹,并添加一个名为serviceconfig.xml的xml文件(您可以提供任何名称)。serviceconfig的内容如下-
您可以在这里找到有关serviceconfig的更多信息
现在在清单文件中添加服务,如下所示-
完成后,只需运行应用程序并进入手机的辅助功能设置,您将发现一个名为“检测”的选项(或您提供的任何服务描述名称),打开该选项即可为您的应用程序授予访问权限。
现在你将看到一个祝酒词时,电话被接听。
您可以在其中编写任何代码,也可以在活动中调用回调函数
最重要的是-不要呼叫您的呼叫窗口(android拨号窗口)直到电话被接听,否则这将无法工作。
注意-由于android没有提供任何解决方案来检测是否有人接听电话,这是我做的最好的选择,希望它对你有用。
dgjrabp25#
在您的onreceive中:
单独类别:
你所需要做的就是写一些代码来检查之前的状态是否是“ringing”。如果当前状态为空闲,而前一状态为振铃,则会取消呼叫。如果当前状态为offhook,而前一状态为ringing,则他们会接听电话。