求助: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叠加的,即你可以一次性同时注册多个事件的监听器。
posted @ 2014-10-17 10:26  android开发难学吗  阅读(2363)  评论(0)    收藏  举报
我要啦免费统计