当前位置:编程学习 > wap >>

android 拦截电话

可以拦截, 并自动挂断电话,

问题是:来电记录为啥还会保留在手机的通话记录中(显示为一个未接来电 HTC真机测试)




//黑名单
if(ContactAdapter.phoneFilterMap.keySet().contains(phoneNumber)){
//拦截
this.abortBroadcast();
//挂断
Method getITelephonyMethod = TelephonyManager.class.getDeclaredMethod("getITelephony", (Class[]) null);
getITelephonyMethod.setAccessible(true);
TelephonyManager mTelephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
Object mITelephony =  getITelephonyMethod.invoke(mTelephonyManager, (Object[]) null);
mITelephony.getClass().getMethod("endCall", new Class[] { })
.invoke(mITelephony, new Object[] {});
}



我感觉是不是 //拦截
this.abortBroadcast();
  没起作用??????


求解 --------------------编程问答-------------------- 嗯、对的、 确实存在这个问题 --------------------编程问答-------------------- 来电归来电,

通信记录可能需要单独处理
http://ffly.iteye.com/blog/796546 --------------------编程问答--------------------
引用 2 楼 wuyu637 的回复:
来电归来电,

通信记录可能需要单独处理
http://ffly.iteye.com/blog/796546


abortBroadcast 可否帮忙解释一下这个方法 在此不起作用么 还是??

我看短信拦截挺好的一点不留痕迹

--------------------编程问答-------------------- 我估计是,你在抓到这个广播的同时,系统也抓到了,你把电话挂了,系统就写成了未接电话
--------------------编程问答-------------------- 方便的话我看看你配置文件中的Receiver --------------------编程问答--------------------
引用 5 楼 mahaiyun18 的回复:
方便的话我看看你配置文件中的Receiver



<receiver android:name=".interceptor.CoffeeInterceptor">
<intent-filter android:priority="10000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>

//拦截
//java.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast
this.abortBroadcast();



abortBroadcast 这个报异常啦。。。 不能用


--------------------编程问答-------------------- 你再查查这个 <intent-filter android:priority属性,我在网上看到对他的解释不一样:

普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然而有序广播是按照接收者声明的优先级别,被接收者依次接收广播。如:A的级别高于B,B的级别高于C,那么,广播先传给A,再传给B,最后传给C 。优先级别声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置 。有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。另外,有序广播的接收者可以将数据传递给下一个接收者,如:A得到广播后,可以往它的结果对象中存入数据,当广播传给B时,B可以从A的结果对象中得到A存入的数据。

如果这个正确的话,那你给的值太高了,你在换个值试试,反正优先级越高越好。 --------------------编程问答--------------------
引用 7 楼 mahaiyun18 的回复:
你再查查这个 <intent-filter android:priority属性,我在网上看到对他的解释不一样:

普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然……


如果这个正确的话,那你给的值太高了

-------------------------------

没怎么看懂。。。。。 --------------------编程问答-------------------- 楼主 能把你怎么捕获电话的代码贴上么,现在正需要,谢谢 --------------------编程问答--------------------
引用 8 楼 id19870510 的回复:
引用 7 楼 mahaiyun18 的回复:
你再查查这个 <intent-filter android:priority属性,我在网上看到对他的解释不一样:

普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效率比较高,但缺点是:接收者不能将处理结果传递给下一……


我的意思是android:priority的值取值是-1000——1000,你给的10000,系统能抓到来电的广播,说明你的接收器优先级不够,还有中可能就是你抓到广播后的处理方法有问题。 --------------------编程问答--------------------
引用 10 楼 mahaiyun18 的回复:
引用 8 楼 id19870510 的回复:
引用 7 楼 mahaiyun18 的回复:
你再查查这个 <intent-filter android:priority属性,我在网上看到对他的解释不一样:

普通广播(Normal broadcasts)”和“有序广播(Ordered broadcasts)”。普通广播是完全异步的,可以在同一时刻(逻辑上)被所有接收者接收到,消息传递的效……


哦。 但是那个 广播是无序的,异步传播
。。。。

我咋给了个 10000  多了一个0 ?  我再试试  
--------------------编程问答--------------------
引用 9 楼 zsw53362465 的回复:
楼主 能把你怎么捕获电话的代码贴上么,现在正需要,谢谢


工程的源码  http://android-21.googlecode.com/svn/trunk/CoffeeInterceptor

你自己checkout 一下看看吧 --------------------编程问答-------------------- 这个问题解决了没有? --------------------编程问答--------------------
引用 13 楼 wuxiaoyong007 的回复:
这个问题解决了没有?

这个解决了 不过又遇到其他问题了
--------------------编程问答-------------------- ?楼主怎么解决的?
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,