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

前些日子由于功能需要做一个来电悬浮窗就搜索了一下相应的demo。但是,我发现所有的demo都有可能产生多个悬浮窗,刚开始弄了一下午也没解决,也在eoe提问了还是没解决。最后自己在打印log时发现了一个问题。我修改后的代码如下(主要是电话响铃状态):

<pre name="code" class="java">/**
	 * 监听手机来电状态
	 */
	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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值