我想在调用 API 时获取设备的信号强度。我已经搜索了所有相关的线程,但还没有成功。
所以我想得到信号强度
SignalStrength ss = null ; // some initialization
int n = ss.getGsmSignalStrength();
但是在使用这个时,很明显我会得到空指针异常,因为我已经初始化了SignalStrength
为空。但我不知道如何初始化它。
还有我不想用PhoneStateListener
因为只有当信号发生变化时才会触发。
我使用下面的代码获取信号强度
TelephonyManager telephonyManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
CellInfoGsm cellinfogsm = (CellInfoGsm)telephonyManager.getAllCellInfo().get(0);
CellSignalStrengthGsm cellSignalStrengthGsm = cellinfogsm.getCellSignalStrength();
cellSignalStrengthGsm.getDbm();
但我不想使用CellSignalStrength
因为它仅在 API 级别 17 中添加,并且在 17 下无法工作。我希望代码在 API 级别 7+ 上工作。
或者有没有其他方法,以便我可以在调用 API 时获取信号强度?
定义变量:
TelephonyManager mTelephonyManager;
MyPhoneStateListener mPhoneStatelistener;
int mSignalStrength = 0;
然后将此类添加到您的代码中:
class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
mSignalStrength = signalStrength.getGsmSignalStrength();
mSignalStrength = (2 * mSignalStrength) - 113; // -> dBm
}
}
并在你的onCreate
方法使用:
mPhoneStatelistener = new MyPhoneStateListener();
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStatelistener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)