关于android来电监听产生可移动悬浮窗结果产生多个悬浮窗的问题。

来源:互联网 发布:千古忠佞有谁知知乎 编辑:程序博客网 时间:2024/05/21 08:23
前些日子由于功能需要做一个来电悬浮窗就搜索了一下相应的demo。但是,我发现所有的demo都有可能产生多个悬浮窗,刚开始弄了一下午也没解决,也在eoe提问了还是没解决。最后自己在打印log时发现了一个问题。我修改后的代码如下(主要是电话响铃状态):
/**
* 监听手机来电状态
*/
PhoneStateListener listener = new PhoneStateListener() {

@Override
public void onCallStateChanged(int state, final String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:// 电话挂断状态
popPhoneRemove();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:// 电话接听状态
popPhoneRemove();
break;
case TelephonyManager.CALL_STATE_RINGING:// 电话铃响状态
if(!flag && !TextUtils.isEmpty(incomingNumber)){
flag = true;
telRinging(incomingNumber);// 打开来电悬浮窗界面,传递来电号码
}
break;
default:

break;
}
}

};
我在电话响铃状态加了log打印输出日志发现这个case有时会走多次,然后我也到stackoverflow上搜索了一下。最后才知道貌似android本身的这个响铃监听确实存在触发多次的问题。因此我就在自己的代码响铃监听出加了一个flag标志位。触发后就把它置为true,从而避免这个case多次的问题。当然你也可以参考他们的回答也能解决问题
相关参考:
http://stackoverflow.com/questions/13620134/telephonymanager-call-state-idle-calls-more-than-one-time
http://stackoverflow.com/questions/18853511/telephonymanager-call-state-ringing-calls-twice-while-one-call-ringing
最后我想请教大家监听去电接听或者挂断如何实现。小弟感激不尽。
0 0
原创粉丝点击