2013-02-17 62 views
0

我想显示当前的信号强度和当前的细胞ID和Lac在我的应用程序3g网络。由于它必须兼容API-8,因此我使用android.telephony的SignalStrength类。当我点击一个按钮时,现在我想让它显示当前单元的CID,Lac和信号强度。我得到的CID和LAC但信号强度始终显示为0。下面的代码给出:我的PhoneStateListener没有被调用来显示信号强度

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.bShowCell: 
     GsmCellLocation location; 
     String cellID = ""; 
     String lac = ""; 
     Context context = (Context) getApplicationContext(); 
     TelephonyManager tm = (TelephonyManager) context 
       .getSystemService(Context.TELEPHONY_SERVICE); 
     location = (GsmCellLocation) tm.getCellLocation(); 
     cellID = String.valueOf(location.getCid()); 
     lac = String.valueOf(location.getLac()); 
     CurCell.setText(cellID); 
     CellLac.setText(lac); 
     CurStrgth.setText(getRSSI()); 
    } 
} 

public String getRSSI() { 
    MyListener = new MyPhoneStateListener(); 
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
    String strength = MyListener.getStrength(); 
    return strength; 
} 

class MyPhoneStateListener extends PhoneStateListener { 

    public int singalStrengths; 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
     int asu = signalStrength.getGsmSignalStrength(); 
     singalStrengths = -113 + 2 * asu; 
    } 

    public String getStrength() { 
     return String.valueOf(singalStrengths); 
    } 
} 

我在网上查很多例子,我想我的代码是好的。但是当我在调试模式下检查它时,我发现当我点击按钮时,程序永远不会进入onSignalStrengthsChanged。有什么我失踪?

+0

你注册你的听众吗?你有权限吗?如果是的话,请尝试使'singalStrengths'静态 - 或者更好地将其存储在偏好中。即使如此,它不会显示最新的信号 - 请参阅http://stackoverflow.com/questions/3888775/instant-signal-strength – 2013-07-08 13:21:45

+0

很久以前,我记得当我取消getRSSI()方法并将listener和.getStrength()直接在OnCreate()中,它工作正常。但说实话仍然不知道为什么它运作良好。 – 2013-07-08 13:52:18

+0

将它作为答案发布 - 我不知道它为什么起作用 - 您确定这是您做出的唯一更改吗? – 2013-07-08 13:58:51

回答

0

嗯,这是我以后的尝试,它工作正常。我必须使CurStrgth.setText()独立于Button和PhoneStateListener内部,并从OnCreate()方法调用侦听器。它工作正常,每当它获得信号强度的变化时更新CurStrgth TextView。我下面的代码给出:

public class MainActivity extends Activity implements OnClickListener { 


TextView CurStrgth; 
MyPhoneStateListener MyListener; 
TelephonyManager Tel; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    CurStrgth = (TextView) findViewById(R.id.tvCurCellStrength); 

    MyListener = new MyPhoneStateListener(); 

    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 


} 


@Override 
protected void onPause() { 
    super.onPause(); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_NONE); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); 
} 

private class MyPhoneStateListener extends PhoneStateListener { 
    String gsmStrength = ""; 

    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) { 
     super.onSignalStrengthsChanged(signalStrength); 
      gsmStrength = String 
       .valueOf(signalStrength.getGsmSignalStrength() * 2 - 113); 
     CurStrgth.setText(MyListener.getStrength() + "dBm"); 
    } 

    public String getStrength() { 
     return gsmStrength; 
    } 

} 
} 

现在,我检查只是调用

CurStrgth.setText(MyListener.getStrength() + "dBm"); 

一个按钮的OnClick()方法中,它显示了一次性的价值,但如果我以后按下按钮它从不更新力量并不断显示初始值。

+0

可能在您的初始实现中,它没有时间更新变量 - 请参阅[here ](http://stackoverflow.com/a/5832912/281545)。 “它永远不会更新实力并不断显示初始价值” - >即使价值确实发生了变化? (请参阅http://stackoverflow.com/a/372​​0676/281545:侦听器只能在大信号更改中调用)。编辑:请!不要使用以大写字母开头的变量名(格式更好 - 但避免不必要的空行)。编辑2:为什么你注册onResume和onCreate? EDIT3:接受你的回答:) – 2013-07-08 17:39:01

+0

实际上,当它发生了很大的变化时它改变了汽车,但我不认为你可以控制听者的倾听。但我计划,当我已经启动监听器并注册它时,如果我只需点击一个按钮,就可以从该监听器更新的值中获取最新值,但它会起作用,但似乎只是第一次单击按钮,然后它保持显示相同的值,即使我改变了我的房间!并感谢编辑:D注册实际上是这是像我的早期代码之一.. – 2013-07-08 23:55:43

+0

欢迎 - 也许检查http://stackoverflow.com/questions/3888775/instant-signal-strength/17533439#17533439 - 也许为您提供更新的信号 - 如果您希望用户收到您的评论通知,请添加@Mr_and_Mrs_D(示例) - 我只是偶然看到这一点 – 2013-07-09 00:04:33