PhoneStateListener怪怪的? [英] PhoneStateListener acting weird?
问题描述
这是怎么回事奇怪的是当我听到所有的三种状态
-
LISTEN_CELL_INFO
-
LISTEN_CELL_LOCATION
-
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
LISTEN_CELL_INFO
LISTEN_CELL_LOCATION
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屋!