【发布时间】:2015-11-26 06:34:12
【问题描述】:
我编写了一个小 Android 程序来检测蜂窝信号强度。我在手机中插入了一张过期的 SIM 卡,它在状态栏中显示零信号。但是,以下代码返回 Signal strength equals to 22。
public class WelcomeActivity extends AppCompatActivity {
TelephonyManager telephonyManager;
CustomPhoneStateListener customPhoneStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
customPhoneStateListener = new CustomPhoneStateListener();
telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
@Override
protected void onPause() {
super.onPause();
telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_NONE);
}
@Override
protected void onResume() {
super.onResume();
telephonyManager.listen(customPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
/* Phone State Listener */
private class CustomPhoneStateListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
int strength = signalStrength.getGsmSignalStrength();
Toast.makeText(getApplicationContext(), "Signal Strength: " + String.valueOf(strength), Toast.LENGTH_SHORT).show();
}
}
}
值 22 从何而来?如何检测蜂窝网络是否已连接?这个值真的靠谱吗?
从 Android documentation 开始,getGsmSignalStrength() 返回值 0 到 31 和 99。
【问题讨论】:
-
你试过检查它在飞行模式下返回的值吗?
-
在飞行模式下,信号强度为0。
-
要么您安装了一些第三方信号优化器软件,否则它工作正常。只是我已经实现了相同的,并且对我有用,请在下面的答案中检查代码