经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。
但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话:
1、注册broadcast receiver,监视手机状态:
<receiver android:name=".PhoneBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
当手机接收到电话时,则会触发该broadcast receiver。
2、最重要的,就是取得可以控制电话的API。这些API貌似是android内部的接口,并未暴露。具体方式参见该帖子:http://topic.csdn.net/u/20091226/00/09e2979b-7c8c-4991-856d-586a278875c0.html
使用时需要手动添加import:
import com.android.internal.telephony.ITelephony;
同样的方式,在stackoverflow上也有人大致地提了下:http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android
值得注意的是,使用这种方式拒接来电,broadcast receiver会被触发两次。第一次是收到来电,第二次则是由于调用endCall拒接了后触发。我们在处理自己的程序逻辑时,可以通过ITelephony.getCallState来区分。该函数返回1表示来电,0表示拒接来电。
最后,这个方法有时候依然会出现系统接听电话的界面,并且,通话记录里也会有拒接电话的记录。这个原因大概也是系统底层在处理这块逻辑时,系统逻辑和通知broadcast receiver的存在先后顺序。这篇文章中分析了部分源码,也算是提个醒:
http://blog.wangling.me/2009/08/why-it-is-impossible-to-intercept-incoming-calls-on-android/
分享到:
相关推荐
【标题】"短信拒接,来电转接"的Android项目是一个专门为Android平台设计的应用程序,旨在帮助用户管理和控制他们的通信方式。这个项目的核心功能包括自动拒绝短信和将来电转移至预设的电话号码,这对于忙碌时或者...
本文档记录了 Android 开发者在实现直接拒接来电和获取联系人信息的过程中所遇到的问题和解决方案。 实现直接拒接来电 Android 没有现成的 API 来拒接电话,但是可以通过注册 BroadcastReceiver 截取短信,并使用...
但请注意,由于`ITelephony`是隐藏接口,直接使用可能会导致安全问题和应用被Google Play拒绝。因此,对于生产环境,你可能需要寻找替代方案,如使用系统的无障碍服务或依赖于第三方库。 最后,将广播接收器注册到...
首先,要实现来电拦截,我们需要了解Android的电话服务API。Android提供了`com.android.internal.telephony`包,其中包含与电话相关的类,如`ITelephony`接口。然而,由于它是内部包,直接使用会面临权限问题。通常...
需要注意的是,为了遵守Google Play政策,只有在用户明确同意的情况下,应用才能直接拨打电话,否则可能会被Google Play Store拒绝上架。 此外,如果你的应用需要处理来电或者挂断电话的事件,你可以注册...
- 接着,系统会播放来电铃声,并展示来电界面等待用户接听或拒接。 2. **电话处于无声模式或未设置响铃时**: - 用户在来电界面进行接听操作时,系统会立即暂停后台音乐播放。 - 系统随后调整声音模式,并进入...
- `PopupWindow`的创建需要一个布局文件,该布局包含来电显示的信息(如电话号码)以及操作按钮(如接听、拒接、关闭)。 3. **权限管理**: - 实现来电监听功能,需要在AndroidManifest.xml文件中声明`READ_...
在Android平台上,实现来电拦截功能主要涉及到监听电话状态和处理拨出电话的广播接收器。以下将详细讲解如何实现这一功能。 首先,要在AndroidManifest.xml文件中声明必要的权限,以允许应用读取电话状态、拨打电话...
在这个场景下,我们关注的是如何在智能手机上实现拨打电话以及挂断电话的功能。这通常涉及到使用编程语言(如Java或Swift)来操作设备的通话API,与操作系统(如Android或iOS)进行交互,以及理解网络通信的基本原理...
4. **来电管理**:这包括接听、拒接、挂断电话,以及设置来电黑白名单等功能。用户可以方便地在电脑界面上进行操作,无需频繁接触手机。 5. **短信管理**:除了收发短信外,还可能包括短信的分类、存储、搜索、删除...
在Android中,系统默认不允许直接通过API拒接电话,但开发者可以通过注册BroadcastReceiver来监听手机状态。当来电时,可以动态地拦截来电事件,阻止电话接听并进行其他自定义操作,如发送拒绝短信通知。 对于高级...
4. 在通话设定中,选择【自动拒绝】,这将打开拒接电话的设置界面。 5. 接下来,找到并启用【启动自动拒绝】选项,通常是一个带有复选框的开关,将其打钩表示开启此功能。 6. 点击【自动拒绝列表】,这里可以添加...
在微信小程序开发中,"微信小程序之列表打电话"是一个常见的应用场景,主要目的是让用户能够通过小程序直接拨打指定的电话号码。这个功能通常出现在如商家服务、客服支持或联系人列表等场景。下面将详细介绍如何实现...
最后,值得注意的是,直接拨打电话可能会导致用户离开当前应用,因此在设计用户界面和交互时应考虑到这一点,例如提供一个确认对话框,告知用户即将拨打电话。 总之,Android拨打电话的Demo涵盖了`Intent`使用、...
在IT行业中,直接调取呼叫功能通常涉及到移动应用或网页应用的开发,目的是为了提供用户一个便捷的方式进行电话拨打。这种功能通常会整合到应用程序中,使得用户无需离开当前界面,就能通过点击按钮直接启动手机的...
标题 "Call_redirect_and_reject" 涉及的是一个 Android 应用程序,该程序能够重定向拨出的电话,并在设定的时间(如5秒)后自动拒绝来电。这个应用程序结合了电话管理与自动化功能,使得用户能够在特定情况下对电话...
如果用户拒绝,应用程序不能直接再次请求该权限,除非在特定的上下文中或者通过设置菜单让用户知道为什么需要这个权限。 在处理用户拒绝权限的情况时,开发者需要实现以下步骤: 1. **检查权限状态**:使用`...
例如,如果某个号码频繁在不适当的时间来电,可以通过捷径设定自动拒接或发送预设信息。 5. **第三方应用扩展**:除了内置功能,iOS还支持许多第三方防骚扰应用,如“360安全卫士”、“腾讯手机管家”等。这些应用...