求助:TelephonyManager.listen 监听使用的问题--如何实现TM同时监控多个状态的改变...

============问题描述============


TelephonyManager.listen(PhoneStateListener, PhoneStateListener.XXXX);

如何实现同时监听两个状态的改变呢?直接设置时实际时最有一次设定有效
tm.listen(strenthL, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
tm.listen(pl, PhoneStateListener.LISTEN_CELL_INFO);
tm.listen(pl, PhoneStateListener.LISTEN_CALL_STATE);

在设置监听时有多个选项:
LISTEN_CALL_FORWARDING_INDICATOR 
LISTEN_CALL_STATE 
LISTEN_CELL_LOCATION 
LISTEN_DATA_ACTIVITY 
LISTEN_DATA_CONNECTION_STATE 
LISTEN_MESSAGE_WAITING_INDICATOR 
LISTEN_NONE 
LISTEN_SERVICE_STATE 
LISTEN_SIGNAL_STRENGTH 
对应不同的回调函数:
onCallForwardingIndicatorChanged(cfi)
onCallStateChanged(state, incomingNumber)
onCellInfoChanged(cellInfo)
onCellLocationChanged(location)
onDataActivity(direction)
onDataConnectionStateChanged(state)
onDataConnectionStateChanged(state, networkType)
onMessageWaitingIndicatorChanged(mwi)
onServiceStateChanged(serviceState)
onSignalStrengthChanged(asu)
onSignalStrengthsChanged(signalStrength)

============解决方案1============


你可以试试这种形式 
tm.listen(pl, PhoneStateListener.LISTEN_CELL_INFO|PhoneStateListener.LISTEN_CALL_STATE);

============解决方案2============


API的有些flag是互斥的,有些则可以叠加的。


/*

    * To register a listener, pass a {@link PhoneStateListener}

     * and specify at least one telephony state of interest in

     * the events argument.

*/

public void listen(PhoneStateListener listener, int events)


从API文档说明来看,第二个参数是events,表示多个事件;而且注释里也说明“至少一个事件状态”,所以events是可以多个flag叠加的,即你可以一次性同时注册多个事件的监听器。

转载于:https://www.cnblogs.com/hugangyan86/p/4030366.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值