Android 实现直接拒接来电
2011-06-20 09:23
155 查看
转自:http://www.hzhike.com/School/2011/201106/20110609222132.html
经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver 截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。
但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话:
1、注册broadcast receiver,监视手机状态:
Java代码
< receiver android:name=".PhoneBroadcastReceiver">
< intent-filter>
< action android:name="android.intent.action.PHONE_STATE" />
< /intent-filter>
< /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:
Java代码
import com.android.internal.telephony.ITelephony;
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的存在先后顺序。这篇文章中分析了部分源码,也算是提个醒。
经过简单的google/baidu后,发现android没有现成的API去拒接电话。android可以通过注册BroadcastReceiver 截取短信,因为这个broadcast是一个ordered broadcast,所以只要优先级比短信接收程序高,就可以提前终止掉这个broadcast receiver。
但是,电话呼入则没有类似的机制。不过,综合网上的一些资料,通过以下大体的步骤,则可以实现拒接电话:
1、注册broadcast receiver,监视手机状态:
Java代码
< receiver android:name=".PhoneBroadcastReceiver">
< intent-filter>
< action android:name="android.intent.action.PHONE_STATE" />
< /intent-filter>
< /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:
Java代码
import com.android.internal.telephony.ITelephony;
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的存在先后顺序。这篇文章中分析了部分源码,也算是提个醒。
相关文章推荐
- Android调用ITelephony类的endCall()方法 实现来电拒接
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果
- android 选择手机图库,实现修改个人资料,头像上传功能,可直接使用
- android来电话按返回键结束来电实现
- Android实现来电自动挂断实现机制
- Android自定义控件9----scrollTo/scrollBy实现滑动和直接绘制滑动的对比使用demo测试
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果
- 替换android_native_app_glue实现, 直接使用ANativeActivity回调
- Android中通过来电转移实现“电话已关机”,“此号码已停机”等
- android 4.4 设置默认短信 和来电短信拒接
- Android端来电拦截的模块实现
- android来电监听功能的实现
- 如何实现android中监听来电并生成悬浮窗体提示
- Android开发之来电电话挂断实现
- [Android] 来电归属地查询的实现思路
- android 来电没有拒接短信功能
- Android代码实现来电拦截【转载】
- Android拒绝来电的实现--ITelephony类的反射
- Android 图片轮番 继承ViewGroup实现 可以直接使用
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果(二)