PhoneStateListener怪怪的? [英] PhoneStateListener acting weird?

查看:603
本文介绍了PhoneStateListener怪怪的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是怎么回事奇怪的是当我听到所有的三种状态


  1. LISTEN_CELL_INFO


  2. LISTEN_CELL_LOCATION


  3. LISTEN_SIGNAL_STRENGTHS


oncellInfoChanged() onCellLocationChanged()被在registeration的时间称为只有一次,我收到定期更新的 onSignalStrengthsChanged()而已。但是,如果我评论 LISTEN_SIGNAL_STRENGTHS 其他两场比赛得到更新正常。任何人都可以指出问题呢?

 公共类GSMCellInfoListener {        TelephonyManager teleManager = NULL;
        上下文mContext;
        GSMCellInfoProvider mGsmCellInfoProvider;        公共GSMCellInfoListener(上下文CTX){
            mContext = CTX;
            mGsmCellInfoProvider =新GSMCellInfoProvider();
        }        公共无效的addListener(){
            teleManager =(TelephonyManager)mContext
                    .getSystemService(Context.TELEPHONY_SERVICE);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_CELL_INFO);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_CELL_LOCATION);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        }        公共无效的removeListener(){
            teleManager
                    。听(mGsmCellInfoProvider,PhoneStateListener.LISTEN_NONE);
        }        公共无效deleteListener(){
            teleManager = NULL;
            mGsmCellInfoProvider = NULL;
        }        类GSMCellInfoProvider扩展PhoneStateListener {
            @覆盖
            公共无效onCellInfoChanged(列表< CellInfo> cellInfo){
                super.onCellInfoChanged(cellInfo);
            }            @覆盖
            公共无效onSignalStrengthsChanged(SignalStrength signalStrength){
                super.onSignalStrengthsChanged(signalStrength);
            }            @覆盖
            公共无效onCellLocationChanged(CellLocation位置){
                super.onCellLocationChanged(位置);
            }
        }
    }


解决方案

你试过注册的所有3个事件一次只有1监听?在内部,mGsmCellInfoProvider可以是地图或设置,所以不允许重复,造成后来的。听(...)调用覆盖前面的。

试试这个:

 公共无效的addListener(){
        teleManager =(TelephonyManager)mContext
                .getSystemService(Context.TELEPHONY_SERVICE);
        INT listenMask = PhoneStateListener.LISTEN_CELL_INFO +
                         PhoneStateListener.LISTEN_CELL_LOCATION +
                         PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
        teleManager.listen(mGsmCellInfoProvider,listenMask);
    }

The weird thing that's happening is when i listen all the three states

  1. LISTEN_CELL_INFO

  2. LISTEN_CELL_LOCATION

  3. LISTEN_SIGNAL_STRENGTHS

oncellInfoChanged() and onCellLocationChanged() gets called only once at the time of registeration and i receive regular updates of onSignalStrengthsChanged() only. However if i comment LISTEN_SIGNAL_STRENGTHS the other two starts getting updates properly. Can anyone point out the issue in this?

public class GSMCellInfoListener {

        TelephonyManager teleManager = null;
        Context mContext;
        GSMCellInfoProvider mGsmCellInfoProvider;

        public GSMCellInfoListener(Context ctx) {
            mContext = ctx;
            mGsmCellInfoProvider = new GSMCellInfoProvider();
        }

        public void addListener() {
            teleManager = (TelephonyManager) mContext
                    .getSystemService(Context.TELEPHONY_SERVICE);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_CELL_INFO);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_CELL_LOCATION);
            teleManager.listen(mGsmCellInfoProvider,
                    PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        }

        public void removeListener() {
            teleManager
                    .listen(mGsmCellInfoProvider, PhoneStateListener.LISTEN_NONE);
        }

        public void deleteListener() {
            teleManager = null;
            mGsmCellInfoProvider = null;
        }

        class GSMCellInfoProvider extends PhoneStateListener {
            @Override
            public void onCellInfoChanged(List<CellInfo> cellInfo) {
                super.onCellInfoChanged(cellInfo);
            }

            @Override
            public void onSignalStrengthsChanged(SignalStrength signalStrength) {
                super.onSignalStrengthsChanged(signalStrength);
            }

            @Override
            public void onCellLocationChanged(CellLocation location) {
                super.onCellLocationChanged(location);
            }
        }
    }

解决方案

Have you tried registering to all 3 events at once with only 1 listener? Internally the mGsmCellInfoProvider may be in a Map or Set, so duplicates aren't allowed, causing the later .listen(...) call to override earlier ones.

Try this:

public void addListener() {
        teleManager = (TelephonyManager) mContext
                .getSystemService(Context.TELEPHONY_SERVICE);
        int listenMask = PhoneStateListener.LISTEN_CELL_INFO +
                         PhoneStateListener.LISTEN_CELL_LOCATION +
                         PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
        teleManager.listen(mGsmCellInfoProvider,listenMask);
    }

这篇关于PhoneStateListener怪怪的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆