首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果没有Sim,则显示信号强度的设备

如果没有Sim,则显示信号强度的设备
EN

Stack Overflow用户
提问于 2013-01-29 14:42:00
回答 2查看 1.9K关注 0票数 7

我使用了以下代码来获取信号强度,

代码语言:javascript
复制
    SignalStrengthListener signalStrengthListener;
    signalStrengthListener = new SignalStrengthListener();
    ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(
            signalStrengthListener,
            SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);

然后它会监听信号强度,

代码语言:javascript
复制
private class SignalStrengthListener extends PhoneStateListener {
    @Override
    public void onSignalStrengthsChanged(
            android.telephony.SignalStrength signalStrength) {

        // get the signal strength (a value between 0 and 31)
        int strengthAmplitude = signalStrength.getGsmSignalStrength();

        // do something with it (in this case we update a text view)
        // signalStrengthText.setText(String.valueOf(strengthAmplitude));
        if (strengthAmplitude > 30) {
            signalStrengthText.setText("Good");
            // signalStrengthText.setTextColor(getResources().getColor(R.color.good));
        } else if (strengthAmplitude > 20 && strengthAmplitude < 30) {
            signalStrengthText.setText("Average");
            // signalStrengthText.setTextColor(getResources().getColor(R.color.average));
        } else if (strengthAmplitude < 20) {
            signalStrengthText.setText("Weak");
            // signalStrengthText.setTextColor(getResources().getColor(R.color.weak));
        }

        super.onSignalStrengthsChanged(signalStrength);
    }
}

如果sim存在于设备中,则工作正常。但是,当我从设备上取下sim,然后检查信号强度时,它仍然提供了一些信号强度的值。

我能想到的一种可能的解决方案是首先检查sim是否存在于设备中,然后显示信号强度。但我想知道这种奇怪行为的解释和可能的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-16 19:57:08

cell服务不需要USIM -仅用于身份验证。否则紧急呼叫将失败。

一点都不奇怪。这是常识,因为您既不移除无线电也不禁用它。

一个简单的测试:取下USIM卡,呼叫紧急服务,假装你正在进行袖珍拨号。

票数 4
EN

Stack Overflow用户

发布于 2018-11-16 20:10:31

在检查信号强度之前,您可以检查设备是否有SIM卡(如果您担心WIFI网络,则需要单独处理),然后检查信号强度。你可以尝试像这样的东西

代码语言:javascript
复制
public boolean isSimAvailable() {
boolean isAvailable = false;
TelephonyManager telMgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
int simState = telMgr.getSimState();
switch (simState) {
case TelephonyManager.SIM_STATE_ABSENT: //SimState = “No Sim Found!”;
break;
case TelephonyManager.SIM_STATE_NETWORK_LOCKED: //SimState = “Network Locked!”;
break;
case TelephonyManager.SIM_STATE_PIN_REQUIRED: //SimState = “PIN Required to access SIM!”;
break;
case TelephonyManager.SIM_STATE_PUK_REQUIRED: //SimState = “PUK Required to access SIM!”; // Personal Unblocking Code
break;
case TelephonyManager.SIM_STATE_READY:
isAvailable = true;
break;
case TelephonyManager.SIM_STATE_UNKNOWN: //SimState = “Unknown SIM State!”;
break;
}
return isAvailable;
}

/当你得到信号强度时,检查如下

代码语言:javascript
复制
SignalStrengthListener signalStrengthListener;
    if(isSimAvailable()){
         signalStrengthListener = new SignalStrengthListener();
         ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).listen(
            signalStrengthListener,
            SignalStrengthListener.LISTEN_SIGNAL_STRENGTHS);
    } else {
         //alert the user or do other stuff.
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14577080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档