android - 在 dbm 中获取信号强度

标签 android signal-strength dbm

我想以 dbm 显示信号强度。但是用我的代码我总是成为结果-1。但是当我在设置中看到信号强度时,它大约是 -81.. 你能找出错误吗?谢谢!

public class MainActivity extends Activity implements OnClickListener {
    TextView dateAndTimeLabel;
    private int signalDBM = 0;

    public class GetParams extends PhoneStateListener {
        @Override  
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);
            signalDBM = signalStrength.getEvdoDbm();
        }
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        GetParams listener = new GetParams();
        TelephonyManager TelManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        TelManager.listen(listener ,PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

        Button btn = (Button)findViewById(R.id.start);
        btn.setOnClickListener(this);             
    }

    public void onClick(View v) {
        Toast.makeText(this, "CDMA signal strength is " + this.signalDBM, Toast.LENGTH_SHORT).show();               
    }

    /* Create options menu etc*/
}

最佳答案

试试这个:

List<CellInfo> cellInfoList = tm.getAllCellInfo();
          //Checking if list values are not null
            if (cellInfoList != null) {
                for (final CellInfo info : cellInfoList) {
                    if (info instanceof CellInfoGsm) {
                        //GSM Network
                        CellSignalStrengthGsm cellSignalStrength = ((CellInfoGsm)info).getCellSignalStrength();
                        dBmlevel = cellSignalStrength.getDbm();
                        asulevel = cellSignalStrength.getAsuLevel();
                    }
                    else if (info instanceof CellInfoCdma) {
                        //CDMA Network
                        CellSignalStrengthCdma cellSignalStrength = ((CellInfoCdma)info).getCellSignalStrength();
                        dBmlevel = cellSignalStrength.getDbm();
                        asulevel = cellSignalStrength.getAsuLevel();
                    }
                    else if (info instanceof CellInfoLte) {
                        //LTE Network
                        CellSignalStrengthLte cellSignalStrength = ((CellInfoLte)info).getCellSignalStrength();
                        dBmlevel = cellSignalStrength.getDbm();
                        asulevel = cellSignalStrength.getAsuLevel();
                    }
                    else if  (info instanceof CellInfoWcdma) {
                        //WCDMA Network
                        CellSignalStrengthWcdma cellSignalStrength = ((CellInfoWcdma)info).getCellSignalStrength();
                        dBmlevel = cellSignalStrength.getDbm();
                        asulevel = cellSignalStrength.getAsuLevel();
                    }
                    else{
                        //Developed as a Cordova plugin, that's why I'm using callbackContext
                        callbackContext.error("Unknown type of cell signal.");
                    }
                }
          }

如果您的手机是三星,它将返回 0 dBm,0 asu。如果没有,那么它应该可以工作(它在我的 Xperia M2 Aqua 中工作)。

关于android - 在 dbm 中获取信号强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24781009/

相关文章:

python-3.x - 在 macOS 上为 Python 3.6.3 使用 dbm.gnu

berkeley-db - BerkeleyDB 的替代品?

android - 是否需要任何配置来使用 Android 和 IOS 的 Web Api 服务(为黑莓开发)

android - 如何通过在 Android-Studio 中编辑 build.gradle 将我的库放在 android.jar 前面

android - 如果手机处于飞行模式或不在网络中,如何获取手机?

java - getGSMSignalStrength() 总是返回 99

C 自定义数据库写入错误

java - Android 将值从子 fragment 传递回父 fragment

android - OnItemClickListener() - Android ListView

iphone - 获取 iPhone 运营商接收状态? (不是互联网)